文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>PHP实现中文字符进制转换原理分析

PHP实现中文字符进制转换原理分析

时间:2011-04-07  来源:php_vfate

原文:http://www.liuhui.info/article30.html( 可能要翻*&墙)

PHP实现中文字符进制转换原理分析

创造于:2010年03月01日07:17 档案在:PHP 浏览次数:1336 作者:liuhui

中文字符编码研究系列第四期,PHP实现中文字符进制转换原理分析,主要讨论中文汉字转换为十进制和十六进制的方法,并掌握转换原理应用于实际开发。本文以GBK编码字符为例,讨论GBK编码的字符转换原理。

一,中文字符转十进制原理分析

GBK编码中一个汉字由二个字符组成,获取汉字字符串的方法如下

  1. $string = "不要迷恋哥";
  2. $length = strlen($string);
  3. for($i=0;$i<$length;$i++){
  4.     if(ord($string[$i])>127){
  5.         $result[] =  ord($string[$i]).' '.ord($string[++$i]);
  6.     }
  7. }
  8. 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()函数把各个中文字符转化为十六进制

实例源代码

  1. $string = "不要迷恋哥";
  2. $length = strlen($string);
  3. echo $string;
  4. $result = array();
  5. //十进制
  6. for($i=0;$i<$length;$i++){
  7.     if(ord($string[$i])>127){
  8.         $result[] =  ord($string[$i]).' '.ord($string[++$i]);
  9.     }
  10. }
  11. var_dump($result);
  12. //十六进制
  13. $strings = array();
  14. foreach($result as $v){
  15.     $dec = explode(" ",$v);
  16.     $strings[] =  dechex($dec[0])." ".dechex($dec[1]);
  17. }
  18. var_dump($strings);


结果如下图

通过上面的方法实现把中文字符转换为十六进制,输出结果可对比使用UltraEdit开发工具获取的十六进制。

三,中文字符转二进制和八进制原理分析

实现中文字符转二进制和八进制与上面的十六进制转换原理一样,只是转换的函数不同,结合上面的实例代码,实现如下

中文字符转二进制,方法如下

  1. $strings = array();
  2. foreach($result as $v){
  3.     $dec = explode(" ",$v);
  4.     $strings[] =  decbin($dec[0])." ".decbin($dec[1]);
  5. }
  6. var_dump($strings);

结果如下:

中文字符转八进制,方法如下

  1. $strings = array();
  2. foreach($result as $v){
  3.     $dec = explode(" ",$v);
  4.     $strings[] =  decoct($dec[0])." ".decoct($dec[1]);
  5. }

结果如下:

了解PHP实现中文字符进制转换原理,再通过PHP内置函数urldecode()就可以把十六进制的字符串通过组合转换为正常的中文汉字,请关注下一期中文字符编码研究系列之urldecode()与urlencode()函数字符编码原理。

实例源代码下载

参考资料
PHP函数篇掌握ord()与chr()函数应用
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

原文:http://www.liuhui.info/article30.html( 可能要翻*&墙)


排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载