欢迎访问宙启技术站
智能推送

PHP函数之substr()和mb_substr()对比

发布时间:2023-06-21 03:35:39

在 PHP 中,提供了两个字符串处理函数 substr() 和 mb_substr(),可以用来截取字符串中指定的一段字符。

substr() 是用于截取 ASCII 字符串的函数,mb_substr() 则是用于截取多字节字符串的函数,其中 mb 表示 multi-byte,多字节的意思。

下面来对这两个函数进行对比。

1. 参数传递方式的不同

substr(string $string, int $start [, int $length]) 函数的参数传递方式比较简单, 个参数是字符串,第二个参数是起始位置,第三个参数是可选的长度(默认情况下,它是到字符串结尾的所有字符)。

mb_substr(string $string, int $start [, int $length [, string $encoding]]) 则多了一个编码类型的参数,用来指定字符串编码类型。如果第三个可选参数省略,则会截取到字符串结尾的所有字符。

2. 字符串长度的不同

由于 mb_substr() 函数可以处理多字节字符,所以其截取字符串的长度也能够正确计算。

举个例子,如果我们有一个长度为 3 的字符串 "笑",使用 substr() 函数截取一个字符的长度时,会返回空字符串,而使用 mb_substr() 函数则会返回正确的结果。

echo substr('笑', 0, 1); // 返回空字符串

echo mb_substr('笑', 0, 1); // 返回 "笑"

3. ASCII 与多字节字符的支持

由于 substr() 函数是用于处理 ASCII 字符的,所以它不能正确处理多字节字符,在截取多字节字符时会出现问题。

而 mb_substr() 函数是专门用于截取多字节字符的,可以处理包括 UTF-8 在内的多种字符集类型。

4. 性能方面的差异

由于 mb_substr() 函数需要处理多种编码类型的字符串,因此它的性能会比 substr() 函数稍微慢一些。

但是,在处理多字符集的字符串时,mb_substr() 函数会比 substr() 函数更加准确,并且不会出现乱码和截取错误等问题。

总结

在对 ASCII 字符串进行截取时,使用 substr() 函数即可;但在对多字节字符进行截取时,必须使用 mb_substr() 函数,否则会出现截取错误和乱码等问题。

同时,如果要确保字符串截取的准确性和完整性,建议在使用 mb_substr() 函数时,一定要传递编码类型参数。