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 相关文章推荐
文章推荐系统(二)
Oct 09 PHP
PHP分页显示制作详细讲解
Nov 19 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
php多任务程序实例解析
Jul 19 PHP
PHP文件缓存类示例分享
Jan 30 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
thinkphp5框架路由原理与用法详解
Feb 11 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
jQuery 获取URL参数的插件
2010/03/04 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
对Python 内建函数和保留字详解
2018/10/15 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
django-filter和普通查询的例子
2019/08/12 Python
python基础 range的用法解析
2019/08/23 Python
Python 复平面绘图实例
2019/11/21 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
香港零食网购:上仓胃子
2020/06/08 全球购物
Overload和Override的区别
2012/09/02 面试题
学生打架检讨书
2014/02/14 职场文书
实习单位鉴定评语
2014/04/26 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
大学生赌博检讨书
2014/09/22 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python