• 技术文章 >后端开发 >php教程

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

    2016-05-17 09:14:04原创526
    一,中文字符转十进制原理分析

    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);

    php-ord-dec-number
    由于一个汉字为两个字符组成,通过ord()函数获取字符的ASCII值如果大于127时,就可以确定当前字符为一个汉字的前半部分,还需要获取汉字的后半部分。当然,这种判断的方法要结合具体的开发环境,如果存在ASCII值大于127的单个字符,这种方法判断显然就不正确。

    PHP实现中文字符转十进制的原理就是通过for循环的方法获取一个汉字的二个字符,然后使用ord()函数把各字符转换为十进制。如上分别是:不 [178 187] 要 [210 170] 迷 [195 212] 恋 [193 181] 哥 [184 231]

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

    使用UltraEdit开发工具可以直接查看中文字符的十六进制,如下图

    如,查看“不要迷恋哥”这五个字的十六进制
    ultraedit-16-hex
    从上面的图可以知道各个汉字对应该的十六进制字符分别是:不 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);

    结果如下图

    php-dec-hex-string

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

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

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

    中文字符转二进制,方法如下
    复制代码 代码如下:

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

    结果如下:
    php-dec-bin-string
    中文字符转八进制,方法如下
    复制代码 代码如下:

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

    结果如下:
    php-string-hex
    了解PHP实现中文字符进制转换原理,再通过PHP内置函数urldecode()就可以把十六进制的字符串通过组合转换为正常的中文汉字,请关注下一期中文字符编码研究系列之urldecode()与urlencode()函数字符编码原理。
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:中文字符 进制转换
    上一篇:php urlencode()与urldecode()函数字符编码原理详解_php技巧 下一篇:PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)_php技巧
    PHP编程就业班

    相关文章推荐

    • 解说PHP框架 (1) 基本概念 • 用过WordPress,对WordPress插件熟习的前辈请进 • 逻辑或 题一个!解决方案 • 关于HTML登陆界面的有关问题。 • (转)PHP缓存的兑现

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网