解析使用substr截取UTF-8中文字符串出现乱码的问题
2015-01-24信息快讯网
本篇文章是对使用substr截取UTF-8中文字符串出现乱码的问题进行了详细的分析介绍,需要的朋友参考下
我们知道有时候使用substr来截取UTF-8中文字符串的时候,经常会出现乱码,为什么会出现这样的问题呢,本文告诉你答案。看这样一段代码吧(字符编码为UTF-8):
<? $str = '都知道strlen与mb_strlen是求字符串长度的函数'; echo strlen($str)'.<br />'.mb_strlen($str,'utf-8'); ?>
运行上述代码,返回值如下:
66
34
怎么样?strlen中,中文是三个字节的长度,英文则是一个字节的长度!mb_strlen中,都被计算为一字节的长度!所以,我们有时候用substr来截取UTF-8中文字符串的时候,经常会出现乱码,就是这个原因了!
下面提供一个截取UTF-8字符串的函数:
function cutstr($sourcestr,$cutlength){ $returnstr = ''; $i = 0; $n = 0; $str_length = strlen($sourcestr); $mb_str_length = mb_strlen($sourcestr,'utf-8'); while(($n < $cutlength) && ($i <= $str_length)){ $temp_str = substr($sourcestr,$i,1); $ascnum = ord($temp_str); if($ascnum >= 224){ $returnstr = $returnstr.substr($sourcestr,$i,3); $i = $i + 3; $n++; } elseif($ascnum >= 192){ $returnstr = $returnstr.substr($sourcestr,$i,2); $i = $i + 2; $n++; } elseif(($ascnum >= 65) && ($ascnum <= 90)){ $returnstr = $returnstr.substr($sourcestr,$i,1); $i = $i + 1; $n++; } else{ $returnstr = $returnstr.substr($sourcestr,$i,1); $i = $i + 1; $n = $n + 0.5; } } if ($mb_str_length > $cutlength){ $returnstr = $returnstr . "..."; } return $returnstr; }
使用例子:
<? $str = '有效期最长三个月,超过有效期系统将自动删除本条信息'; //echo strlen($str); //echo '<hr />'.mb_strlen($str,'utf-8'); echo '<hr />'.$str; echo '<hr />'.cutstr($str,24); ?>
php stripslashes和addslashes的区别
PHP下获取上个月、下个月、本月的日期(strtotime,date)
php缓冲 output_buffering和ob_start使用介绍
linux系统下php安装mbstring扩展的二种方法
php中文乱码怎么办如何让浏览器自动识别utf-8
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
php输入流php://input使用示例(php发送图片流到服务器)
php使用strtotime和date函数判断日期是否有效代码分享
PHP 正则判断中文UTF-8或GBK的思路及具体实现
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
php字符编码转换之gb2312转为utf8
PHP截断标题且兼容utf8和gb2312编码
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
解析php利用正则表达式解决采集内容排版的问题
用Json实现PHP与JavaScript间数据交换的方法详解
php常用Output和ptions/Info函数集介绍
使用array mutisort 实现按某字段对数据排序
php读取二进制流(C语言结构体struct数据文件)的深入解析
基于PHP输出缓存(output_buffering)的深入理解
php缓冲 output_buffering的使用详解
深入PHP autoload机制的详解
PHP stripos()函数及注意事项的分析
基于session_unset与session_destroy的区别详解
基于Linux调试工具strace与gdb的常用命令总结
linux命令之调试工具strace的深入分析
『PHP』PHP截断函数mb_substr()使用介绍
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
php实现utf-8和GB2312编码相互转换函数代码
php验证手机号码(支持归属地查询及编码为UTF8)
PHP正确解析UTF-8字符串技巧应用