• 中文字串截取无乱码的问题


    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字符,否则第一个字节本身就是一个英文字符(包括数字和一小部分标点符号)。

    substr() 函数返回字符串的一部分。

    语法

    substr(string,start,length)
    注意substr(1,2,3),第三个参数,截取返回的长度是按字节来的
    <?php
      $a="我是程序员";
      class Dx
     {
       private $str;
        public function Utf_substr($string,$start,$length)   // utf-8编码的下截取规则
        {
            if(strlen($string)>$length)
            {
              //  $n=0;
                $str="";
                $len=$start+$length;
                for($i=$start;$i<$len;$i++)
                {
                    if(ord(substr($string,$i,1))>224)
                    {
                        $str.=substr($string,$i,3);
                    //    $n+=3;
                        $i=$i+2;
                    }
                    elseif(ord(substr($string,$i,1))>192)
                    {
                        $str.=substr($string,$i,2);
                        $i++;
                    }
                    else
                    {
                        $str.=substr($string,$i,1);
                    }
                }
                return $str;
            }
            else
            {
                return $string;
            }   
        }
        public function GB_substr($string,$start,$length) //gb2312 编码下的截取规则
        {
            if(strlen($string)>$length)
            {
                $str="";
                $len=$start+$length;
                for($i=$start;$i<$len;$i++)
                {
                    if(ord(substr($string,$i,1))>0xa0)   //如果ASCii码大于0xa0就是半个汉字;
                    {
                        $str.=substr($string,$i,2);
                        $i++;
                    }
                    else
                    {
                        $str.=substr($string,$i,1);
                    }
                }
                return $str;
            }
            else
            {
                return $string;
            }   
        }
    
       }
      $sub = new Dx();
      echo $sub->Utf_substr($a,0,8).'<br/>';//我是程序
    
    ?>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
          除了上面的方法,还可以使用mb_substr来解决,代码如下:
    <?php
      $a="wo的name是中国!";
      echo mb_substr($a,0,9,'UTF-8');//wo的name是中
      echo substr($a,0,15);//wo的name是中
    ?>

  • 相关阅读:
    Appium+python自动化13-native和webview切换【转载】
    Appium+python自动化12-appium元素定位【转载】
    Appium+python自动化11-adb必知必会的几个指令【转载】
    Appium+python自动化10-AVD 模拟器【转载】
    Appium+python自动化9-SDK Manager【转载】
    Appium+python自动化8-Appium Python API【转载】
    Appium+python自动化7-输入中文【转载】
    Appium+python自动化6-Remote远程控制【转载】
    Appium+python自动化5-Appium Inspector【转载】
    Centos-内核核心组成
  • 原文地址:https://www.cnblogs.com/tham/p/6827457.html
Copyright © 2020-2023  润新知