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定时计划任务的实现方法详解
Jun 06 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
php随机获取金山词霸每日一句的方法
Jul 09 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
纯PHP代码实现支付宝批量付款
Dec 24 PHP
php实现word转html的方法
Jan 22 PHP
php简单统计中文个数的方法
Sep 30 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
php多进程应用场景实例详解
Jul 22 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 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控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
继续学习javascript闭包
2015/12/03 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
Python字符串替换实例分析
2015/05/11 Python
Python3计算三角形的面积代码
2017/12/18 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
pycharm修改file type方式
2019/11/19 Python
python基于opencv检测程序运行效率
2019/12/28 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
中科前程Java笔试题
2016/11/20 面试题
大学生专科学习生活的自我评价
2013/12/07 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
婚礼主持词开场白
2014/03/13 职场文书
投标承诺书范本
2014/03/27 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
如何做好工作总结!
2019/04/10 职场文书