php截取字符串substr和mb_substr的区别

php截取字符串,可以用substr,mb_substr,mb_struct三个函数,我一般用substr和mb_substr,也没有仔细研究过他们的区别,

觉得随便用一个就好了,先看代码:

php截取字符串substr和mb_substr的区别_第1张图片

        $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

你可能感兴趣的:(php,经验,php)