在PHP開發中會常常用到字符串截取,有的時候字符串截取會出現亂碼的狀況,那麼怎麼解決這個問題呢,其實也很容易php
首先咱們要了解關於中英文佔多少字節的問題。
ASCII碼:一箇中文漢字佔兩個字節的空間。
UTF-8編碼:一箇中文(含繁體)等於三個字節。
Unicode編碼:一箇中文(含繁體)等於兩個字節。
下面咱們就經過幾個簡單的代碼示例爲你們詳細介紹關於PHP截取中英字符串且無亂碼的相關知識。
1、 substr() 截取字符串(是以字節爲單位進行截取的)
<?php
ehco substr('PHP中文網', 0, 5);
substr()中第一個參數表示要截取的字符串,第二個參數表示從0位置開始截取,第三個參數表示截取長度。
截取「PHP中文網」前5個字節,結果以下:
如圖顯示亂碼,也就是說當咱們使用substr函數進行中英文字符串截取時,會出現亂碼,爲何呢?由於substr函數截取字符串的單位是字節,在截取中文的時候會有不能完整截取的狀況出現,因此會出現亂碼的狀況。
2、關於mb_substr()截取字符串
<?php
echo mb_substr('php中文網', 0, 5);
mb_substr:獲取部分字符串。 截取「PHP中文網」前5個字符,結果以下:
如圖截取了前五個字符,而且沒有出現亂碼。 注:mb_substr是根據字符數來執行截取字符串。
3、 mb_strcut() 截取字符串
<?php
echo mb_strcut("PHP中文網", 0, 7);
截取「PHP中文網」前7個字節,結果以下:
從圖中能夠看到,咱們要截取7個字節,可是隻顯示截取了「PHP中」這6個字節。因爲一個漢字等於三個字節,那麼這裏第7個字節就不會顯示了。
綜上所述,若是你們遇到要截取中文字符串並沒有亂碼的需求時,能夠選擇後兩種方法(mb_substr()和mb_strcut())