PHP截取中文乱码问题
最近在做提取文章开头的一部分时,遇到了汉字截取出现乱码的情况,在网上搜了一通,看了许多,自己总结了一下与大家分享。 看前须知: 如果ASCii码大于0xa0就是半个汉字; 了解substr()、mb_substr()、ord()。
<?php /** *———————————- *首先定义自己的函数: *———————————- */ function mysubstr($string, $start, $length) { if(strlen($string)>$length) { $str=”; $len=$start+$length; for($i=$start;$i<$len;$i++) { if(ord(substr($string,$i,1))>0xa0) { $str.=substr($string,$i,2); $i++; } else{ $str.=substr($string,$i,1);} } return $str.’…’; } else{ return $string;} } /** *—————————————————————————————————————– *PHP有一个mbstring扩展库可以用(有朋友面试PHP的时候还被问到过这个问题哦),但是 * 一般的服务器都没打开php_mbstring.dll,需要在 *php.ini里把php_mbstring.dll打开,如果没有权限的话就只有联系你的ISP了。 *因为mb_string的效率高一些,所以我们先检查一下mb_string是否可以用: *—————————————————————————————————————– */ if(function_exists(‘mb_string’)) { mb_substr($string,$start,$length,$encoding); //other codes here } else mysubstr($string,$start,$length);// 调用自己的函数 ?>
还有一个问题要注意,使用这种方法的时候,你的<head>标签对里的charset只有设成中文的编码才可以,如GBK,GB2312。
浙公网安备 33010602011771号