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


Posted in PHP onDecember 06, 2011

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

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()函数获取字符的ASCII值如果大于127时,就可以确定当前字符为一个汉字的前半部分,还需要获取汉字的后半部分。当然,这种判断的方法要结合具体的开发环境,如果存在ASCII值大于127的单个字符,这种方法判断显然就不正确。

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

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

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

如,查看“不要迷恋哥”这五个字的十六进制
PHP中实现中文字符进制转换原理分析
从上面的图可以知道各个汉字对应该的十六进制字符分别是:不 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中实现中文字符进制转换原理分析

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

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

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

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

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

结果如下:
PHP中实现中文字符进制转换原理分析
中文字符转八进制,方法如下
$strings = array(); 
foreach($result as $v){ 
$dec = explode(" ",$v); 
$strings[] = decoct($dec[0])." ".decoct($dec[1]); 
}

结果如下:
PHP中实现中文字符进制转换原理分析
了解PHP实现中文字符进制转换原理,再通过PHP内置函数urldecode()就可以把十六进制的字符串通过组合转换为正常的中文汉字,请关注下一期中文字符编码研究系列之urldecode()与urlencode()函数字符编码原理。
PHP 相关文章推荐
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
比较时间段一与时间段二是否有交集的php函数
May 31 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
Jul 02 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
PHP文件上传操作实例详解
Sep 27 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
用php实现分页效果的示例代码
Dec 10 PHP
PHP性能优化工具篇Benchmark类调试执行时间
Dec 06 #PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 #PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 #PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 #PHP
PHP函数篇之掌握ord()与chr()函数应用
Dec 05 #PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 #PHP
PHP详解ASCII码对照表与字符转换
Dec 05 #PHP
You might like
PHP自定义函数收代码
2010/08/01 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
jquery 弹出层实现代码
2009/10/30 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
pytorch forward两个参数实例
2020/01/17 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
4S店售后客服自我评价
2014/04/09 职场文书
石油工程专业毕业生求职信
2014/04/13 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
企业战略合作意向书
2015/05/08 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis