实现中文字串截取无乱码的方法

UTF-8中文截取函数
在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8编码当中,一个中文可能占有2个或3个字节,英文或半角标点占1字节。
解决方法
UTF-8编码的字符可能由1-3个字节组成,具体数目可以由第一个字节判断出来。
第一个字节大于224的,它与它之后的2个字节一起组成一个UTF-8字符
第一个字节大于192小于224的,它与它之后的1个字节组成一个UTF-8字符,否则第一个字节本身就是一个英文字符(包括数字和一小部分标点符号)。

$a="我是程序员";
class Dx
{
 
   private $str;
    public function msubstr($string,$start,$length)
    {
        if(strlen($string)>$length)
        {
            $n=0;
            $str="";
            $len=$start+$length;
            for($i=$start;$i<$len;$i++)
            {
                if(ord(substr($string,$n,1))>224)
                {
                    $str.=substr($string,$n,3);
                    $n+=3;
                    $i++;
                }
                elseif(ord(substr($string,$n,1))>192)
                {
                    $str.=substr($string,$n,2);
                    $i++;
                }
                else
                {
                    $str.=substr($string,$n,1);
  

你可能感兴趣的:(php)