php中內置函數substr()能夠對指定字符串進行截取,不過,它只對全英文字符串的截取是比較適合的。若是字符串中出現了中文,就有可能致使截取後出現亂碼的問題,甚至在一些場景中如json編碼的時候會致使輸出結果爲null。php
緣由是不一樣字符集中每一個字符佔用的字節數不同,如UTF-8編碼中每一個漢字佔3字節,而GB2312漢字佔2字節,英文則都只佔1字節。確切的說substr()中後兩個參數指定的是字節數量而不是字符數量,因此就有可能出現最後一個漢字字符截取不完整的狀況從而出現中文亂碼。json
遇到中文字符截取時,更好的方法是使用mbstring擴展庫的mb_substr()/mb_strcut()函數。這兩個方法比substr()在最後位置多一個參數,用來指定字符串編碼。$str = '無亂碼的世界更和諧'; echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8');
mb_substr是按字符來切分字符串,而mb_strcut是按字節來切分字符串,可是都不會產生半個字符的現象,從而不會出現中文亂碼。服務器
若是提示mb_substr()方法不存在,那是服務器沒有打開php_mbstring.dll擴展,須要在php.ini配置文件中把php_mbstring.dll打開。函數
extension=php_mbstring.dll