PHP中實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理分析
更新時間:2011年12月06日 01:02:31 作者:
中文字符編碼研究系列第四期,PHP實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理分析,主要討論中文漢字轉(zhuǎn)換為十進(jìn)制和十六進(jìn)制的方法,并掌握轉(zhuǎn)換原理應(yīng)用于實際開發(fā)。本文以GBK編碼字符為例,討論GBK編碼的字符轉(zhuǎn)換原理
一,中文字符轉(zhuǎn)十進(jìn)制原理分析
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()函數(shù)獲取字符的ASCII值如果大于127時,就可以確定當(dāng)前字符為一個漢字的前半部分,還需要獲取漢字的后半部分。當(dāng)然,這種判斷的方法要結(jié)合具體的開發(fā)環(huán)境,如果存在ASCII值大于127的單個字符,這種方法判斷顯然就不正確。
PHP實現(xiàn)中文字符轉(zhuǎn)十進(jìn)制的原理就是通過for循環(huán)的方法獲取一個漢字的二個字符,然后使用ord()函數(shù)把各字符轉(zhuǎn)換為十進(jìn)制。如上分別是:不 [178 187] 要 [210 170] 迷 [195 212] 戀 [193 181] 哥 [184 231]
二,中文字符轉(zhuǎn)十六進(jìn)制原理分析
使用UltraEdit開發(fā)工具可以直接查看中文字符的十六進(jìn)制,如下圖
如,查看“不要迷戀哥”這五個字的十六進(jìn)制

從上面的圖可以知道各個漢字對應(yīng)該的十六進(jìn)制字符分別是:不 B2BB 要 D2AA 迷 C3D4 戀 C1B5 哥 B8E7
PHP 實現(xiàn)中文字符轉(zhuǎn)十六進(jìn)制的原理就是首先使用ord()函數(shù)取出各個中文字符的十進(jìn)制,具體可查看[PHP函數(shù)篇掌握ord()與chr()函數(shù)應(yīng)用],然后使用dechex()函數(shù)把各個中文字符轉(zhuǎn)化為十六進(jìn)制
實例源代碼
$string = "不要迷戀哥";
$length = strlen($string);
echo $string;
$result = array();
//十進(jìn)制
for($i=0;$i<$length;$i++){
if(ord($string[$i])>127){
$result[] = ord($string[$i]).' '.ord($string[++$i]);
}
}
var_dump($result);
//十六進(jìn)制
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = dechex($dec[0])." ".dechex($dec[1]);
}
var_dump($strings);
結(jié)果如下圖
三,中文字符轉(zhuǎn)二進(jìn)制和八進(jìn)制原理分析
實現(xiàn)中文字符轉(zhuǎn)二進(jìn)制和八進(jìn)制與上面的十六進(jìn)制轉(zhuǎn)換原理一樣,只是轉(zhuǎn)換的函數(shù)不同,結(jié)合上面的實例代碼,實現(xiàn)如下
中文字符轉(zhuǎn)二進(jìn)制,方法如下
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = decbin($dec[0])." ".decbin($dec[1]);
}
var_dump($strings);
結(jié)果如下:

中文字符轉(zhuǎn)八進(jìn)制,方法如下
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = decoct($dec[0])." ".decoct($dec[1]);
}
結(jié)果如下:

了解PHP實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理,再通過PHP內(nèi)置函數(shù)urldecode()就可以把十六進(jìn)制的字符串通過組合轉(zhuǎn)換為正常的中文漢字,請關(guān)注下一期中文字符編碼研究系列之urldecode()與urlencode()函數(shù)字符編碼原理。
GBK編碼中一個漢字由二個字符組成,獲取漢字字符串的方法如下
復(fù)制代碼 代碼如下:
$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()函數(shù)獲取字符的ASCII值如果大于127時,就可以確定當(dāng)前字符為一個漢字的前半部分,還需要獲取漢字的后半部分。當(dāng)然,這種判斷的方法要結(jié)合具體的開發(fā)環(huán)境,如果存在ASCII值大于127的單個字符,這種方法判斷顯然就不正確。
PHP實現(xiàn)中文字符轉(zhuǎn)十進(jìn)制的原理就是通過for循環(huán)的方法獲取一個漢字的二個字符,然后使用ord()函數(shù)把各字符轉(zhuǎn)換為十進(jìn)制。如上分別是:不 [178 187] 要 [210 170] 迷 [195 212] 戀 [193 181] 哥 [184 231]
二,中文字符轉(zhuǎn)十六進(jìn)制原理分析
使用UltraEdit開發(fā)工具可以直接查看中文字符的十六進(jìn)制,如下圖
如,查看“不要迷戀哥”這五個字的十六進(jìn)制

從上面的圖可以知道各個漢字對應(yīng)該的十六進(jìn)制字符分別是:不 B2BB 要 D2AA 迷 C3D4 戀 C1B5 哥 B8E7
PHP 實現(xiàn)中文字符轉(zhuǎn)十六進(jìn)制的原理就是首先使用ord()函數(shù)取出各個中文字符的十進(jìn)制,具體可查看[PHP函數(shù)篇掌握ord()與chr()函數(shù)應(yīng)用],然后使用dechex()函數(shù)把各個中文字符轉(zhuǎn)化為十六進(jìn)制
實例源代碼
復(fù)制代碼 代碼如下:
$string = "不要迷戀哥";
$length = strlen($string);
echo $string;
$result = array();
//十進(jìn)制
for($i=0;$i<$length;$i++){
if(ord($string[$i])>127){
$result[] = ord($string[$i]).' '.ord($string[++$i]);
}
}
var_dump($result);
//十六進(jìn)制
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = dechex($dec[0])." ".dechex($dec[1]);
}
var_dump($strings);
結(jié)果如下圖
三,中文字符轉(zhuǎn)二進(jìn)制和八進(jìn)制原理分析
實現(xiàn)中文字符轉(zhuǎn)二進(jìn)制和八進(jìn)制與上面的十六進(jìn)制轉(zhuǎn)換原理一樣,只是轉(zhuǎn)換的函數(shù)不同,結(jié)合上面的實例代碼,實現(xiàn)如下
中文字符轉(zhuǎn)二進(jìn)制,方法如下
復(fù)制代碼 代碼如下:
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = decbin($dec[0])." ".decbin($dec[1]);
}
var_dump($strings);
結(jié)果如下:

中文字符轉(zhuǎn)八進(jìn)制,方法如下
復(fù)制代碼 代碼如下:
$strings = array();
foreach($result as $v){
$dec = explode(" ",$v);
$strings[] = decoct($dec[0])." ".decoct($dec[1]);
}
結(jié)果如下:

了解PHP實現(xiàn)中文字符進(jìn)制轉(zhuǎn)換原理,再通過PHP內(nèi)置函數(shù)urldecode()就可以把十六進(jìn)制的字符串通過組合轉(zhuǎn)換為正常的中文漢字,請關(guān)注下一期中文字符編碼研究系列之urldecode()與urlencode()函數(shù)字符編碼原理。
您可能感興趣的文章:
- PHP通過iconv將字符串從GBK轉(zhuǎn)換為UTF8字符集
- php utf-8轉(zhuǎn)unicode的函數(shù)
- PHP如何實現(xiàn)Unicode和Utf-8編碼相互轉(zhuǎn)換
- 支持生僻字且自動識別utf-8編碼的php漢字轉(zhuǎn)拼音類
- PHP UTF8編碼內(nèi)的繁簡轉(zhuǎn)換類
- 用PHP實現(xiàn)將GB編碼轉(zhuǎn)換為UTF8
- 用PHP將Unicode 轉(zhuǎn)化為UTF-8的實現(xiàn)方法(推薦)
- PHP實現(xiàn)十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制轉(zhuǎn)換相關(guān)函數(shù)用法分析
- PHP二進(jìn)制與字符串之間的相互轉(zhuǎn)換教程
- PHP函數(shù)篇詳解十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制轉(zhuǎn)換函數(shù)說明
- PHP實現(xiàn)UTF8二進(jìn)制及明文字符串的轉(zhuǎn)化功能示例
相關(guān)文章
php基于mcrypt_encrypt和mcrypt_decrypt實現(xiàn)字符串加密解密的方法
這篇文章主要介紹了php基于mcrypt_encrypt和mcrypt_decrypt實現(xiàn)字符串加密解密的方法,結(jié)合實例形式分析了mcrypt_encrypt和mcrypt_decrypt函數(shù)進(jìn)行加密、解密的相關(guān)使用技巧,需要的朋友可以參考下2016-07-07PHP extract 將數(shù)組拆分成多個變量的函數(shù)
extract()函數(shù)提取關(guān)聯(lián)數(shù)組(對數(shù)字索引數(shù)組無效)每對key和value,生成以key為變量名、value為對應(yīng)值的多組新變量。2010-06-06php中怎么搜索相關(guān)聯(lián)數(shù)組鍵值及獲取之
array_search()函數(shù)在一個數(shù)組中搜索一個指定的值,如果找到則返回相應(yīng)的鍵,否則返回FALSE2013-10-10php 廣告調(diào)用類代碼(支持Flash調(diào)用)
php 廣告調(diào)用類代碼(支持Flash調(diào)用),非常方便php頁面中加載廣告。需要的朋友可以參考下。2011-08-08PHP下通過file_get_contents的代理使用方法
2011-02-02處理(php-cgi.exe?-?FastCGI?進(jìn)程超過了配置的請求超時時限)的問題
本篇文章是對解決(php-cgi.exe?-?FastCGI?進(jìn)程超過了配置的請求超時時限)的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07