一,中文字符轉十進制原理分析
GBK編碼中一個漢字由二個字符組成,獲取漢字字符串的方法如下
復制代碼 代碼如下:
$string = "不要迷戀哥";
$length = strlen($string);
for($i=0;$i<$length;$i++){
if(ord($string[$i])>127){
$result[] = ord($string[$i]).' '.ord($string[++$i]);
}
}
var_dump($result);
由於一個漢字為兩個字符組成,通過ord()函數獲取字符的ASCII值如果大於127時,就可以確定當前字符為一個漢字的前半部分,還需要獲取漢字的後半部分。當然,這種判斷的方法要結合具體的開發環境,如果存在ASCII值大於127的單個字符,這種方法判斷顯然就不正確。
PHP實現中文字符轉十進制的原理就是通過for循環的方法獲取一個漢字的二個字符,然後使用ord()函數把各字符轉換為十進制。如上分別是:不 [178 187] 要 [210 170] 迷 [195 212] 戀 [193 181] 哥 [184 231]
二,中文字符轉十六進制原理分析
使用UltraEdit開發工具可以直接查看中文字符的十六進制,如下圖
如,查看“不要迷戀哥”這五個字的十六進制
從上面的圖可以知道各個漢字對應該的十六進制字符分別是:不 B2BB 要 D2AA 迷 C3D4 戀 C1B5 哥 B8E7
PHP 實現中文字符轉十六進制的原理就是首先使用ord()函數取出各個中文字符的十進制,具體可查看[PHP函數篇掌握ord()與chr()函數應用],然後使用dechex()函數把各個中文字符轉化為十六進制
實例源代碼
復制代碼 代碼如下:
$string = "不要迷戀哥";
$length = strlen($string);
echo $string;
$result = array();
//十進制
for($i=0;$i<$length;$i++){
if(ord($string[$i])>127){
$result[] = ord($string[$i]).' '.ord($string[++$i]);
}
}
var_dump($result);
//十六進制
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = dechex($dec[0])." ".dechex($dec[1]);
}
var_dump($strings);
結果如下圖