比方說,我有一個UTF-8
文字是這樣的:是否需要用mb_ *替換多字節字符串中的單字節字符?
âàêíóôõ <br> âàêíóôõ <br> âàêíóôõ
我想<br />
更換<br>
。我需要使用mb_str_replace
還是我可以使用str_replace
?
Consindering <
b
r
/
>
都是單字節字符?
比方說,我有一個UTF-8
文字是這樣的:是否需要用mb_ *替換多字節字符串中的單字節字符?
âàêíóôõ <br> âàêíóôõ <br> âàêíóôõ
我想<br />
更換<br>
。我需要使用mb_str_replace
還是我可以使用str_replace
?
Consindering <
b
r
/
>
都是單字節字符?
由於str_replace
是二進制安全的,UTF-8是雙射編碼,即使搜索字符串或替換包含多字節字符,只要所有三個參數都編碼爲UTF-8,即可使用str_replace
。
這就是爲什麼首先沒有mb_str_replace
函數。
如果你的編碼不是雙射 - 即有相同的字符串的多種表示,例如<
在UTF-7,它可以作爲'+ADw-'
和'<'
表示兩者,則應該將所有的字符串轉換爲相同的(雙射)編碼,應用str_replace
,然後將字符串轉換爲目標編碼。
Reference for manipulating UTF-8 strings safely in PHP。沒有硬性規定。一些原生的PHP字符串函數函數可以在UTF-8上安全地運行,有些可以小心翼翼,有些則不能。
沒有mb_str_replace()
。注意「UTF-8安全功能」部分:explode()
和str_replace()
是安全的,只要它的所有三個參數都是有效的UTF-8字符串即可。
雙射編碼? O_O – dynamic 2012-02-06 19:21:22
所以基本上UTF-8我可以忘記'mb_str_replace'?考慮到「UTF-8」,我可以忘記哪些其他mb_ *? – dynamic 2012-02-06 19:27:02
例如'mb_substr_count();'? – dynamic 2012-02-06 19:28:47