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将数据库中的电话号码读取出来并生成图片
Aug 31 PHP
PHP教程 变量定义
Oct 23 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
php中的观察者模式简单实例
Jan 20 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
Thinkphp调用Image类生成缩略图的方法
Mar 07 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
PHP怎样用正则抓取页面中的网址
Aug 09 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
PHP实现的文件浏览器功能简单示例
Sep 12 PHP
laravel 框架执行流程与原理简单分析
Feb 01 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/03/04 星际争霸
php过滤危险html代码
2008/08/18 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
node.js实现端口转发
2016/04/14 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
Python3实现购物车功能
2018/04/18 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
详解Python用户登录接口的方法
2019/04/17 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
问卷调查计划书
2014/01/10 职场文书
淘宝店策划方案
2014/06/07 职场文书
公共场所标语
2014/06/30 职场文书
旅游活动总结
2014/08/27 职场文书
新教师个人总结
2015/02/06 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
《废话连篇——致新手》——chinapizza
2022/04/05 无线电
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle