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-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
destoon实现底部添加你是第几位访问者的方法
Jul 15 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
PHP图片加水印实现方法
May 06 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
PHP 接入支付宝即时到账功能
Sep 18 PHP
php封装的验证码工具类完整实例
Oct 19 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
PHP实现基于状态的责任链审批模式详解
May 31 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/02/07 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
JS变量及其作用域
2017/03/29 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
python实现神经网络感知器算法
2017/12/20 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
windows下python安装pip图文教程
2018/05/25 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
Python如何实现转换URL详解
2019/07/02 Python
django 单表操作实例详解
2019/07/30 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
贝佳斯官方网站:Borghese
2020/05/08 全球购物
中秋晚会策划方案
2014/06/12 职场文书
好的促销活动方案
2014/08/21 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
小学四年级学生评语
2014/12/26 职场文书
成事在人观后感
2015/06/16 职场文书