视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php中文截取乱码怎么办
2020-11-27 13:59:58 责编:小采
文档


php中文截取乱码的解决办法:

实现的原理还是比较简单,主要是利用ASCII编码和中文编码的二进制范围不一致而把它们区分开来,然后,通过substr()截取字符串的函数实现的。

下面给出我写的代码,注意:我这里只针对utf-8编码,其他编码,看官可以自己手动改一下函数,以便支持其他的编码。

<?php
header('content-type:text/html;charset=utf-8;');
$str = '利要a-符e:r ttnx节小-子s区。vh;peh。例t来个oe体字n代gb节看t通c eu是的soS至什tna过码 t;Ie看C实e/,字le A来具8y么a)n=于ndg是r于 0tmt现码 e0ssf8单下s(uo别e的以ieh过aatx和t接要u几这看 nsw Ihrr用字 mgtts上就eg cAei的nwo码e跳h,t编';
/*
*在某篇文章中截取一段字符串,多余的用省略号...表示,并且防止中文乱码
*$param1 string要截取的字符串 $str 注意:这里是utf-8编码
*$param2 int截取字符串的长度 $len 
*返回值 成功返回所要截取的字符串,失败为空
*/
function str($str='',$len=0){
 //检查参数
 if(!is_string($str) || !is_int($len)){
 return '';
 }
 $length = strlen($str);
 if($length <= 0 ){
 return '';
 }
 if($len>=$length){
 return $str;
 }
 //初始化,统计字符串的个数,
 $count = 0;
 for($i=0;$i<$length;$i++){
 //达到个数跳出循环,$i即为要截取的长度
 if($count == $len){
 break;
 }
 $count++;
 //ord函数是获取字符串的ASCII编码,大于等于十六进制0x80的字符串即为中文字符串
 if(ord($str{$i}) >= 0x80){
 $i +=2;//中文编码的字符串的长度再加2
 }
 }
 //如果要截取的个数超过了字符串的总个数,那么我们返回全部字符串,不带省略号
 if($len > $count){
 return $str;
 }else{
 return substr($str,0,$i).'...';
 }
}

以上代码的实现就是利用单字节字符的ASCII码小于0x80。至于要跳过几个字节,这要看具体是什么编码。

相关免费学习推荐:php编程(视频)

下载本文
显示全文
专题