在 PHP 中将音调符号字符替换为“等效的”ASCII?
2022-08-30 22:55:10
相关问题:
与上面的问题一样,我正在寻找一种可靠,健壮的方法,使用PHP将任何Unicode字符减少到接近等效的ASCII。我真的想避免滚动我自己的查找表。
例如(从第一个引用的问题中窃取):变为Gračišće
Gracisce
相关问题:
与上面的问题一样,我正在寻找一种可靠,健壮的方法,使用PHP将任何Unicode字符减少到接近等效的ASCII。我真的想避免滚动我自己的查找表。
例如(从第一个引用的问题中窃取):变为Gračišće
Gracisce
iconv 模块可以做到这一点,更具体地说,就是 iconv() 函数:
$str = iconv('Windows-1252', 'ASCII//TRANSLIT//IGNORE', "Gracišce");
echo $str;
//outputs "Gracisce"
iconv的主要麻烦在于,您只需要观察编码,但它绝对是完成工作的正确工具(由于我正在使用的文本编辑器的限制,我使用“ Windows-1252”作为示例;)您绝对想要使用的 iconv 的功能是标志,它告诉 iconv 将任何没有 ASCII 匹配的字符音译为最接近的近似值。//TRANSLIT
根据@zombat的答案,我找到了另一种解决方案。
他的答案的问题是我得到了:
Notice: iconv() [function.iconv]: Wrong charset, conversion from `UTF-8' to `ASCII//TRANSLIT//IGNORE' is not allowed in D:\www\phpcommand.php(11) : eval()'d code on line 3
从函数中删除后,我得到了://IGNORE
Gr'a'e~a~o^O"ucisce
因此,字符被正确翻译,但其他字符却没有。š
对我有用的解决方案是(删除除[a-zA-Z0-9]之外的所有内容 - 包括空格)和@zombat的解决方案之间的混合:preg_replace
preg_replace('/[^a-zA-Z0-9.]/','',iconv('UTF-8', 'ASCII//TRANSLIT', "GráéãõÔücišce"));
输出:
GraeaoOucisce