首頁 >後端開發 >php教程 >substr截取出現中文亂碼怎麼辦

substr截取出現中文亂碼怎麼辦

一个新手
一个新手原創
2017-09-06 16:51:012161瀏覽
<pre style="font-family:Consolas; font-size:12pt">方法一:
<?php
    header("Content-Type: text/html; charset=utf-8");$str="107sadf网站工作室欢迎您!";
        echo strlen($str)."<br>";
        echo substr($str,0,12)."<br>";
        echo mb_strlen($str,"UTF8")."<br>";
        echo mb_substr($str,0,12,"UTF8")."<br>";
?>
<br>
显示结果如下
34
107sadf网�
16
107sadf网站工作室

    strlen()函數傳回字串所佔的位元組長度,一個英文字母、數字、各種符號均佔一個位元組,它們的長度均為1。一個中文字符佔兩個字節,所以一個中文字符的長度是2,對於一個UTF-8的中文字符,會把它當做長度為3來處理。 <br>

怎么准确的计算字符串的长度呢?这里,得引入另外一个函数mb_strlen()。mb_strlen()函数的用法与strlen()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:
mb_substr也同样的原理注:mb_strlen与mb_substr并不是PHP的核心函数,使用前需要打开php.ini中的extension=php_mbstring.dll这一项

方法二:
<?php
    header("Content-Type: text/html; charset=utf-8");
        $str="107sadf网站工作室欢迎您!";
        function chinesesubstr($str,$start,$len){        
        $strlen = $len - $start;    //定义需要截取字符的长度        
        for($i=0;$i<$strlen;$i++){                   //使用循环语句,单字截取,并用$tmpstr.=$substr(?,?,?)加起来            
            if(ord(substr($str,$i,1))>0xa0){     //ord()函数取得substr()的第一个字符的ASCII码,如果大于0xa0的话则是中文字符               
             $tmpstr.=substr($str,$i,3);        //设置tmpstr递加,substr($str,$i,3)的3是指三个字符当一个字符截取(因为utf8编码的三个字符算一个汉字)                
             $i+=2;            
                }
            else{                             //其他情况(英文)按单字符截取               
             $tmpstr.=substr($str,$i,1);            
                }        
            }        
         return $tmpstr;}
         echo chinesesubstr($str,0,12)."<br>";
 ?>

最後結果顯示為:

107sadf网站
<br>

以上是substr截取出現中文亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn