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 内存缓存加速功能memcached安装与用法
Sep 03 PHP
zend framework多模块多布局配置
Feb 26 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
php中explode函数用法分析
Nov 15 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
Windows下的PHP5.0详解
2006/11/18 PHP
PHP 程序员也要学会使用“异常”
2009/06/16 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
PHP attributes()函数讲解
2019/02/03 PHP
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
python分析nignx访问日志脚本分享
2015/02/26 Python
Python unittest单元测试框架总结
2018/09/08 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
个人找工作求职简历的自我评价
2013/10/20 职场文书
大学生个人推荐信范文
2013/11/25 职场文书
二年级体育教学反思
2014/01/15 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
Python中json.dumps()函数的使用解析
2021/05/17 Python
你知道Java Spring的两种事务吗
2022/03/16 Java/Android