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学习教程之第2天
Jun 15 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
PHP正则验证Email的方法
Jun 15 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
分享3个php获取日历的函数
Sep 25 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
yii插入数据库防并发的简单代码
May 27 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
php workerman定时任务的实现代码
Dec 23 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 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操作excel文件 基于phpexcel
2010/07/02 PHP
php定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
一个原生的用户等级的进度条
2010/07/03 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中使用dom模块生成XML文件示例
2015/04/05 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
关于numpy数组轴的使用详解
2019/12/05 Python
python绘制雪景图
2019/12/16 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
机关党员四风问题个人整改措施
2014/10/26 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
学习焦裕禄先进事迹心得体会
2016/01/23 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle