在 PHP 中将音调符号字符替换为“等效的”ASCII?

2022-08-30 22:55:10

相关问题:

  1. 如何替换java字符串中的字符?
  2. 如何在C#中用它们的等价物替换特殊字符(例如“á”代表“a”)?

与上面的问题一样,我正在寻找一种可靠,健壮的方法,使用PHP将任何Unicode字符减少到接近等效的ASCII。我真的想避免滚动我自己的查找表。

例如(从第一个引用的问题中窃取):变为GračišćeGracisce


答案 1

iconv 模块可以做到这一点,更具体地说,就是 iconv() 函数:

$str = iconv('Windows-1252', 'ASCII//TRANSLIT//IGNORE', "Gracišce");
echo $str;
//outputs "Gracisce"

iconv的主要麻烦在于,您只需要观察编码,但它绝对是完成工作的正确工具(由于我正在使用的文本编辑器的限制,我使用“ Windows-1252”作为示例;)您绝对想要使用的 iconv 的功能是标志,它告诉 iconv 将任何没有 ASCII 匹配的字符音译为最接近的近似值。//TRANSLIT


答案 2

根据@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

推荐