在我們學習PHP知識的過程中,PHP截取字符串應該是一個非常常見的字符串基礎操作了,想必大家都比較熟悉這方面知識點。 但是有些新手朋友們可能遇到過,當截取中英文字符串時出現亂碼的情況,其實這個也是非常容易解決的。 首先我們要了解關於中英文占多少字節的問題。 ASCII碼:一個中文漢字占兩個字節的空間。 UTF-8編碼:一個中文(含繁體)等於三個字節。 Unicode編碼:一個中文(含繁體)等於兩個字節。 下面我們就通過幾個簡單的代碼示例為大家詳細介紹關於PHP截取中英字符串且無亂碼的相關知識。 一、關於substr函數截取字符串 <?php echo substr("PHP中文網", 0, 5); substr:返回字符串的子串。 substr()中第一個參數表示要截取的字符串,第二個參數表示從0位置開始截取,第三個參數表示截取長度。 截取“PHP中文網”前5個字節,結果如下:
如圖顯示亂碼,也就是說當我們使用substr函數進行中英文字符串截取時,會出現亂碼。 二、關於mb_substr函數截取字符串 <?php echo mb_substr("PHP中文網", 0, 5); mb_substr:獲取部分字符串。 截取“PHP中文網”前5個字符,結果如下:
如圖截取了前五個字符,並且沒有出現亂碼。 注:mb_substr是根據字符數來執行截取字符串。 三、關於mb_strcut函數截取字符串 <?php echo mb_strcut("PHP中文網", 0, 7); 截取“PHP中文網”前7個字節,結果如下:
從圖中可以看到,我們要截取7個字節,但是只顯示截取了“PHP中”這6個字節。由於一個漢字等於三個字節,那么這里第7個字節就不會顯示了。
綜上所述,如果大家遇到要截取中文字符串並無亂碼的需求時,可以選擇后兩種方法(mb_substr()和mb_strcut())