我的PHP代码存在问题,它会转换非重音字符中的重音字符。我有一年前使用此代码,但我试图让它工作但没有成功。翻译没有正确完成。
以下是代码:
<?php
echo accentdestroyer('azeméis');
/**
*
* This function transform accent characters to non accent characters
* @param text $string
*/
function accentdestroyer($string) {
$string=strtr($string,
"()!$?: ,&+-/.ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ"
,
"-------------SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy");
return $string;
}
?>
我已经测试过将文档保存为UTF-8但是给我这样的东西:“azemy is”
我可以采取哪些线索来使其正常工作?
最诚挚的问候,
答案 0 :(得分:2)
更好的解决方案可能是使用transliterate自动iconv()
这些字符。
至于你的功能不起作用的原因,它可能与echo strlen('Š');
输出2的事实有关。documentation显式引用单字节字符
此外,
$a = 'Š';
var_dump(strtr('Š', 'Š', '!')); // string(2) "!�"
所以第一个字节已匹配,但第二个字节(剩余)不是指向有效Unicode字符的字节。
以下是使用iconv()
的工作示例。
$str = 'ŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚ';
$str = iconv("utf-8", "us-ascii//TRANSLIT", $str);
var_dump($str); // string(37) "OEZsoezY?uAAAAAAAECEEEEIIII?NOOOOO?UU"
有些字符没有完全翻译,例如¥
和Ø
,但大多数人都这样做了。您可以将//IGNORE
附加到输出字符集,以静默方式丢弃那些不会音译的字符集。
您也可以使用\pL
{{1}}删除所有非字字符。