PHP:用UTF-8字符串中最接近的7位ASCII等效字符替换变音符号

时间:2020-03-06 14:58:54  来源:igfitidea点击:

我想做的是从字符串中删除所有重音符号和变音符号,将" lrm"变成" larm",或者将" andr"变成" andre"。我想做的是先对字符串进行utf8_decode,然后在其上使用strtr,但是由于我的源文件另存为UTF-8文件,因此我无法为所有变音符号输入ISO-8859-15字符,因此编辑器会插入UTF -8个字符。

显然,解决方案是拥有一个包含ISO-8859-15文件的包含文件,但是有比包含另一个所需包含文件更好的方法吗?

echo strtr(utf8_decode($input), 
           '???????¥μàá??????èéê?ìí??D?òó????ùú?üY?àáa?????èéê?ìí??e?òó????ùú?üy?',
           'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');

更新:也许我对尝试做的事情有点不准确:我实际上并不是要删除变音符号,而是将其替换为最接近的"一个字符ASCII"。

解决方案

好的,我自己找到了一个明显的解决方案,但这并不是性能方面的最佳解决方案...

echo strtr(utf8_decode($input), 
           utf8_decode('???????¥μàá??????èéê?ìí??D?òó????ùú?üY?àáa?????èéê?ìí??e?òó????ùú?üy?'),
           'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy');

iconv("utf-8","ascii//TRANSLIT",$input);

扩展示例