是否需要mb_ *来替换多字节字符串中的单字节字符?

时间:2012-02-06 19:18:28

标签: php utf-8

假设我有UTF-8这样的文字:

âàêíóôõ <br> âàêíóôõ <br> âàêíóôõ

我想将<br>替换为<br />。我需要使用mb_str_replace还是我可以使用str_replace

Consindering < b r / >都是单字节字符?

2 个答案:

答案 0 :(得分:4)

由于str_replace是二进制安全的,UTF-8是双射编码,因此即使搜索字符串或替换包含多字节字符,您也可以使用str_replace,只要所有三个参数都是编码为UTF-8。

这就是为什么首先没有mb_str_replace功能的原因。

如果您的编码不是双射的 - 即同一个字符串有多个表示形式,例如UTF-7中的<,可以表示为'+ADw-''<',你应该将所有字符串转换为相同(双射)编码,应用str_replace,然后将字符串转换为目标编码。

答案 1 :(得分:2)

Reference for manipulating UTF-8 strings safely in PHP。没有严格的规则。一些原生的PHP字符串函数函数可以在utf-8上安全地运行,有些可以小心操作,有些则不能。

没有mb_str_replace()。请注意“UTF-8安全功能”部分:explode()str_replace()是安全的,只要它的所有三个参数都是有效的UTF-8字符串。