字符串按要求的字符編碼來轉(zhuǎn)換有bug怎么辦
2021-07-20
詳細(xì)說明:
——根據(jù)需要的字符編碼轉(zhuǎn)換字符串
有一個bug,一些生僻字不會被轉(zhuǎn)換。當(dāng)然,在配置第二個參數(shù)的時候,可以稍微彌補一下默認(rèn)的缺陷,這樣轉(zhuǎn)換就不會被截斷了。用法如下
("UTF-8","http://",$data);
這樣,當(dāng)遇到生詞轉(zhuǎn)換失敗時,會忽略失敗,繼續(xù)轉(zhuǎn)換后面的內(nèi)容。
iconv
string iconv ( string $in_charset , string $out_charset , string $str )
第一個參數(shù):內(nèi)容原的編碼
第二個參數(shù):目標(biāo)編碼
第三個參數(shù):要轉(zhuǎn)的字符串
函數(shù)返回字符串
php
$instr = ‘測試’;
// GBK轉(zhuǎn)UTF-8
$outstr = iconv(‘GBK’,'UTF-8′,$instr);
?>
返回值
返回轉(zhuǎn)換后的字符串,失敗時返回。
詳細(xì)說明:
為了保證轉(zhuǎn)換的成功率,我們可以使用另一個轉(zhuǎn)換函數(shù)
,這個函數(shù)效率不高。另外這個功能也可以省略第三個參數(shù)來自動識別內(nèi)容碼,但是最好不要使用,影響效率。如果需要注意的話編碼轉(zhuǎn)換 php,和參數(shù)的順序是不一樣的。注意。
附上兩個函數(shù)編碼轉(zhuǎn)換 php,簡單使用:
mb_convert_encoding
string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )
第一個參數(shù):要處理的字符串
第二個參數(shù):目標(biāo)編碼
第三個參數(shù):內(nèi)容原編碼,它可以是一個 array 也可以是逗號分隔的枚舉列表
$instr = '測試';
// GBK轉(zhuǎn)UTF-8
$outstr = mb_convert_encoding($instr,'UTF-8','GBK',);
$str = mb_convert_encoding($instr, "UCS-2LE", "JIS, eucjp-win, sjis-win");
?>
個人建議在遇到轉(zhuǎn)碼問題時多保險一些。
——轉(zhuǎn)換一個或多個變量的字符編碼
mb_convert_variables ( $to_encoding , $from_encoding , &$vars [, mixed &$... ] )
將變量 vars 的代碼從代碼轉(zhuǎn)換為代碼。
mb_convert_variables() 會拼接變量數(shù)組或?qū)ο笾械淖址畞頇z測編碼,因為短字符串的檢測往往會失敗。因此,不能在一個數(shù)組或?qū)ο笾谢旌鲜褂镁幋a。
to_encoding 將 string 轉(zhuǎn)換成這個編碼。
from_encoding 可以指定為一個 array 或者逗號分隔的 string,它將嘗試根據(jù) from-coding 來檢測編碼。 當(dāng)省略了 from_encoding,將使用 detect_order。
vars 是要轉(zhuǎn)換的變量的引用。 參數(shù)可以接受 String、Array 和 Object 的類型。 mb_convert_variables() 假設(shè)所有的參數(shù)都具有同樣的編碼。
額外的 vars。
返回值 :
成功時返回轉(zhuǎn)換前的字符編碼,失敗時返回 FALSE。
實例:
/* 轉(zhuǎn)換變量 $post1、$post2 編碼為內(nèi)部(internal)編碼 */
$interenc = mb_internal_encoding();
$inputenc = mb_convert_variables($interenc, "ASCII,UTF-8,SJIS-win", $post1, $post2);
?>
——設(shè)置/獲取內(nèi)部字符編碼
mixed mb_internal_encoding ([ string $encoding = mb_internal_encoding() ] )
參數(shù) :
encoding 字符編碼名稱使用于 HTTP 輸入字符編碼轉(zhuǎn)換、HTTP 輸出字符編碼轉(zhuǎn)換、mbstring 模塊系列函數(shù)字符編碼轉(zhuǎn)換的默認(rèn)編碼。
返回值 :
如果設(shè)置了 encoding,則成功時返回 TRUE, 或者在失敗時返回 FALSE。 In this case, the character encoding for multibyte regex is NOT changed. 如果省略了 encoding,則返回當(dāng)前的字符編碼名稱。
/* 設(shè)置內(nèi)部字符編碼為 UTF-8 */
mb_internal_encoding("UTF-8");
/* 顯示當(dāng)前的內(nèi)部字符編碼*/
echo mb_internal_encoding();
?>
詳細(xì)說明:
——檢測字符的編碼
string mb_detect_encoding ( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false ]] )
檢查字符串str的編碼。
參數(shù)
str 待檢查的字符串。
encoding_list 是一個字符編碼列表。 編碼順序可以由數(shù)組或者逗號分隔的列表字符串指定。
如果省略了 encoding_list 將會使用 detect_order。
strict strict 指定了是否嚴(yán)格地檢測編碼。 默認(rèn)是 FALSE。
返回值
檢測到的字符編碼,或者無法檢測指定字符串的編碼時返回 FALSE。
當(dāng)字符串編碼未知時對字符串進(jìn)行編碼:
1、不管是什么字符串編碼,都會轉(zhuǎn)成gbk
function getSafeStr($str){
$s1 = iconv('utf-8','gbk//IGNORE',$str);
$s0 = iconv('gbk','utf-8//IGNORE',$s1);
if($s0 == $str){
return $s1;
}else{
return $str;
}
}
2、不管是什么字符串編碼,都會轉(zhuǎn)為utf-8
function getSafeStr($str){
$s1 = iconv('gbk','utf-8//IGNORE',$str);
$s0 = iconv('utf-8','gbk//IGNORE',$s1);
if($s0 == $str){
return $s1;
}else{
return $str;
}
}
獲取字符串編碼方式:
function getcode($str)
{
$s1 = iconv('utf-8','gbk//IGNORE',$str);
$s0 = iconv('gbk','utf-8//IGNORE',$s1);
if($s0 == $str){
return 'utf-8';
}else{
return 'gbk';
}
}