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+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
php 动态执行带有参数的类方法
Apr 10 PHP
一些 PHP 管理系统程序中的后门
Aug 05 PHP
PHP 防注入函数(格式化数据)
Aug 08 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
php统计文章排行示例
Mar 04 PHP
php使用glob函数快速查询指定目录文件的方法
Nov 15 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP+MySql实现一个简单的留言板
Jul 19 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简单的会话类代码
2011/08/08 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
php工具型代码之印章抠图
2018/07/18 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
js 动态选中下拉框
2009/11/26 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
python 内置模块详解
2019/01/01 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
pandas数据处理进阶详解
2019/10/11 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
前台文员的岗位职责
2013/11/14 职场文书
2014年庆元旦活动方案
2014/02/15 职场文书
公司年会主持词
2014/03/22 职场文书
个人股份合作协议书
2014/10/24 职场文书
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS