一个例子说明substr(), mb_substr() 和 mb_strcut()之间的区别
例子来自PHP官方文档,我只是翻译下。
http://www.php.net/manual/zh/function.mb-strcut.php
header( 'Content-Type:text/html;charset=utf-8 '); mb_internal_encoding('UTF-8'); $string = 'cioèòà'; var_dump( substr($string, 0, 6), mb_substr($string, 0, 6), mb_strcut($string, 0, 6) );
输出:
Output: string(6) "cioè?" string(9) "cioèòà" string(5) "cioè"
解释:
$string 长度是 9 字节(bytes)
c - 1 byte
i - 1 byte
o - 1 byte
è - 2 bytes
ò - 2 bytes
à - 2 bytes
substr()按字节截取,精确的返回6个字节长度的字符串。因此 ò 这个完整的字符,他也会毫不留情的咔嚓一下,一截两段。后果会出现难看的问号字符。
mb_strcut()同样按字节截取,但是碰到上面的情况,要截取最后一个字符中的字节,会忽略掉这个字符。
所以$string = mb_strcut($string, 6); strlen($string) <= 6 截取后的长度可能会小于要求的长度
mb_substr()按字符截取,所以返回6个字符长度的字符串,但注意原字符串有9个字节。