1. 程式人生 > >php擷取字串substr和mb_substr的區別

php擷取字串substr和mb_substr的區別

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.phphttp://php.net/manual/zh/function.mb-substr.php