PHP Multi Byte str_replace?

Ian*_*Ian 12 php string replace multibyte-functions

我正在尝试在PHP中进行重音字符替换但得到时髦的结果,我的猜测是因为我使用UTF-8字符串并且str_replace无法正确处理多字节字符串..

$accents_search     = array('á','à','â','ã','ª','ä','å','Á','À','Â','Ã','Ä','é','è',
'ê','ë','É','È','Ê','Ë','í','ì','î','ï','Í','Ì','Î','Ï','œ','ò','ó','ô','õ','º','ø',
'Ø','Ó','Ò','Ô','Õ','ú','ù','û','Ú','Ù','Û','ç','Ç','Ñ','ñ'); 

$accents_replace    = array('a','a','a','a','a','a','a','A','A','A','A','A','e','e',
'e','e','E','E','E','E','i','i','i','i','I','I','I','I','oe','o','o','o','o','o','o',
'O','O','O','O','O','u','u','u','U','U','U','c','C','N','n'); 

$str = str_replace($accents_search, $accents_replace, $str);
Run Code Online (Sandbox Code Playgroud)

结果我得到:

Ørjan Nilsen -> ?orjan Nilsen
Run Code Online (Sandbox Code Playgroud)

预期结果:

Ørjan Nilsen -> Orjan Nilsen
Run Code Online (Sandbox Code Playgroud)

编辑:我的内部字符处理程序设置为UTF-8(根据mb_internal_encoding()),$ str的值也是UTF-8,所以从我所知,所涉及的所有字符串都是UTF-8.str_replace()是否检测到char集并正确使用它们?

dav*_*dav 18

根据php文档,str_replace函数是二进制安全的,这意味着它可以处理UTF-8编码文本而不会丢失任何数据.


小智 5

看起来字符串没有被替换,因为您的输入编码和文件编码不匹配.