如何删除重音符号并将字母转换为“普通”ASCII字符?
从字符串中删除重音符号的最有效方法是什么,例如 成为?ÈâuÑ
Eaun
有没有一个简单的,内置的方式,我错过了或正则表达式?
从字符串中删除重音符号的最有效方法是什么,例如 成为?ÈâuÑ
Eaun
有没有一个简单的,内置的方式,我错过了或正则表达式?
如果您安装了 iconv,请尝试以下操作(该示例假定您的输入字符串采用 UTF-8 格式):
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);
(iconv是一个在各种编码之间转换的库;它是有效的,默认情况下包含在许多PHP发行版中。最重要的是,这绝对比尝试滚动自己的解决方案更容易,更防错(您是否知道有一个“拉丁字母N与卷曲”?我也不是。
我找到了一个解决方案,可以在我所有的测试用例中工作(从 http://php.net/manual/en/transliterator.transliterate.php 复制):
var_dump(transliterator_transliterate('Any-Latin; Latin-ASCII; [\u0080-\u7fff] remove',
"A æ Übérmensch på høyeste nivå! И я люблю PHP! есть. fi ¦"));
// string(50) "A ae Ubermensch pa hoyeste niva! I a lublu PHP! est. fi "
请参见: http://www.php.net/normalizer
编辑:此解决方案独立于使用 setlocale() 的区域设置集。与 iconv() 相比的另一个好处是,即使是非拉丁字符也不会被忽略。
编辑2:我发现,有些字符没有被我最初发布的音译所覆盖。 将西里尔字符转换为不适合拉丁语字符集的字符:(http://en.wikipedia.org/wiki/Prime_%28symbol%29)。我已经添加了删除所有这些非拉丁字符。我还在文本中添加了一个测试;)Any-Latin
ь
ʹ
[\u0100-\u7fff] remove
我建议,它们指的是拉丁字母,而不是这里的拉丁字符集之一。但无论如何 - 在我看来,他们应该将其音译为ASCII,然后在...Latin
Latin-ASCII
编辑3:很抱歉在这里有其他更改。我不得不将字符减少到u0080而不是u0100,以便仅获取ASCII字符作为输出。上面的测试已更新。