php擷取字串substr和mb_substr的區別
阿新 • • 發佈:2018-12-19
php擷取字串,可以用substr,mb_substr,mb_struct三個函式,我一般用substr和mb_substr,也沒有仔細研究過他們的區別,
覺得隨便用一個就好了,先看程式碼:
$str1 = substr("abcdef", 1); // 返回 "bcdef" $str2 = substr("abcdef", 2); // 返回 "cdef" $str3 = substr("abcdef", 0,1); // 返回 "a" $str4 = substr("abcdef", 0,2); // 返回 "ab" $str5 = substr("abcdef", -1); // 返回 "f" $str6 = substr("abcdef", -2); // 返回 "ef" $str7 = substr("abcdef", 0,-1); // 返回 "abcde" $str8 = substr("abcdef", 0,-2); // 返回 "abcd" $str9 = substr('你好你好你好',1);//返回:��好你好你好 $str10 = mb_substr('你好你好你好',1);//返回:好你好你好
用substr和mb_substr列印前面八個,結果一樣的,但是列印第九和第十個的時候,也就是擷取中文的時候,區別出來了,substr返回的結果有亂碼,而mb_substr擷取的正常,看一下亂碼的字元,有兩個類似問號的東東,猜一下:UTF-8編碼,一個漢字佔3個位元組,第一個漢字是“你”,把它分為3個位元組,然後被截掉了一個,還剩兩個(類似兩個問號的東東),和後面的“好你好你好”,就打印出了“��好你好你好”,可以在漢字前面加一個字母或者英文標點符號試一下,就可以完全把第一位截掉。
宣告:這是猜測,不是什麼結論,也不要被帶偏了。因為我在網上搜出來的結果是:mb_substr是按字來切分字元,而mb_strcut是按位元組來切分字元。
能動手的就不要猜,自己打印出來印證一下,先解決要擷取字串的問題,然後再慢慢研究用哪個好,有什麼區別。
php函式方法列表:http://php.net/manual/zh/function.substr.php,http://php.net/manual/zh/function.mb-substr.php