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
Nov 25 PHP
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
PHP与SQL注入攻击[一]
Apr 17 PHP
关于在php.ini中添加extension=php_mysqli.dll指令的说明
Jun 14 PHP
PHP $_SERVER详解
Jan 16 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
php调用mysql存储过程实例分析
Dec 29 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
laravel学习教程之存取器
Jul 30 PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
PHP7移除的扩展和SAPI
Mar 09 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中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
浅谈PHP命令执行php文件需要注意的问题
2016/12/16 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
利用Mongoose让JSON数据直接插入或更新到MongoDB
2017/05/03 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python列表(list)常用操作方法小结
2015/02/02 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
python删除文本中行数标签的方法
2018/05/31 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
【python】matplotlib动态显示详解
2019/04/11 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
在线服装零售商:SheIn
2016/07/22 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
个人近期表现材料
2014/02/11 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
承诺书的格式范文
2014/03/28 职场文书
社区工作者演讲稿
2014/05/23 职场文书
大学生简短的自我评价
2014/09/12 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
职工培训工作总结
2015/08/10 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书