PHP正确解析UTF-8字符串技巧应用

2015-01-24信息快讯网

总结了一个UTF-8的编码规则,根据这个编码规则,写一个UTF-8编码的解析程序,以下是PHP的实现,需要的朋友可以参考下

在《学习PHP&MYSQL之――字符编码篇(一)》中介绍了Unicode与UTF-8的转换关系,总结了一个UTF-8的编码规则,根据这个编码规则,写一个UTF-8编码的解析程序,以下是PHP的实现:
<?php 
/* 
程序功能,$str是中英文混合的UTF-8编码字符串, 
将此字符串根据UTF-8的编码规则正确的解码并显示。 
*/ 


$str = '今天非常Happy,所有决定去KFC吃可乐鸡翅!!!'; 

/* 
$str 是待截取的字符串 
$len 是截取的字符数 
*/ 
function utf8sub($str,$len) { 
if($len <= 0){ 
return ''; 
} 

$offset = 0; // 截取高位字节时的偏移量 
$chars = 0; // 截取到的字符数 
$res = ''; // 存放截取的结果字符串 

while($chars < $len){ 
// 先取字符串的第一个字节 
// 将它转为十进制 
// 再转为二进制 
$high = ord(substr($str,$offset,1)); 

// echo '$high='. $high .'<br />'; 

if($high == null ){ // 如果取出高位为null,证明已经取到末尾,直接break 
break; 
} 
if(($high>>2) === 0x3F){ // 将高位右移2位,和二进制111111比较,相同则取6个字节 
// 截取2个字节 
$count = 6; 
}else if(($high>>3) === 0x1F){ // 将高位右移2位,和二进制11111比较,相同则取5个字节 
// 截取3个字节 
$count = 5; 
}else if(($high>>4) === 0xF){ // 将高位右移2位,和二进制1111比较,相同则取4个字节 

// 截取4个字节 
$count = 4; 
}else if(($high>>5) === 0x7){ // 将高位右移2位,和二进制111比较,相同则取3个字节 

// 截取5个字节 
$count = 3; 
}else if(($high>>6) === 0x3){ // 将高位右移2位,和二进制11比较,相同则取2个字节 
// 截取6个字节 
$count = 2; 
}else if(($high>>7) === 0x0){ // 将高位右移2位,和二进制0比较,相同则取1个字节 
$count = 1; 
} 
// echo '$count='.$count.'<br />'; 

$res .= substr($str,$offset,$count); // 取出一个字符与$res字符串连接 
$chars += 1; // 截取到的字符数+1 
$offset += $count; // 截取高位偏移量向后移$count字节 
} 
return $res; 
} 

echo utf8sub($str,100);
php仿QQ验证码的实例分析
计算php页面运行时间的函数介绍
php 地区分类排序算法
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
php 常用算法和时间复杂度
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
基于php常用函数总结(数组,字符串,时间,文件操作)
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
关于PHP自动判断字符集并转码的详解
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
通过PHP current函数获取未知字符键名数组第一个元素的值
PHP随机字符串生成代码(包括大小写字母)
使用php统计字符串中中英文字符的个数
解析使用substr截取UTF-8中文字符串出现乱码的问题
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
php实现utf-8和GB2312编码相互转换函数代码
PHP C EasyUI DataGrid 资料取的方式介绍
nginx+php-fpm配置文件的组织结构介绍
使用 PHPMAILER 发送邮件实例应用
PHP数据集构建JSON格式及新数组的方法
php动态实现表格跨行跨列实现代码
php语言流程控制中的主动与被动
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
PHP explode()函数用法、切分字符串
PHP中空字符串介绍0、null、empty和false之间的关系
查找mysql字段中固定字符串并替换的几个方法
PHP UTF8中文字符截断函数代码
比较discuz和ecshop的截取字符串函数php版
PHP乱码问题,UTF-8乱码常见问题小结
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
php smarty截取中文字符乱码问题?gb2312/utf-8
©2014-2024 dbsqp.com