setlocale(LC_ALL, 'en_US.UTF8');
$string= 'ṃỹṛèşưḿĕ';
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);

出错了...

应该打印:myresume

最佳答案

它取决于iconv库。

在Ubuntu 10.10中,我得到以下信息:

$ php -i | egrep "iconv (implementation|library)"
iconv implementation => glibc
iconv library version => 2.12.1
$ php a.php
myresume

但是在另一台使用GNU iconv的机器上:
iconv implementation => libiconv
iconv library version => 1.11
# php a.php
Notice: iconv(): Unknown error (88) in /tmp/root/a.php on line 5

iconv完成的音译在各个实现之间不一致。例如,glibc实现将é音译为e,但是libiconv将其音译为'e

除非我们在PHP中支持ICU音译器(由于要使用下一版本),否则将没有可靠的方法来可靠地进行这些转换(尽管如果您只想删除标记,则有other solutions)。在具有intl扩展名的PHP开发版本中,可以执行以下操作:
<?php
$t = Transliterator::create("latin; NFKD; [^\u0000-\u007E] Remove; NFC");
echo $t->transliterate('Ναδάλης ṃỹṛèşưḿĕ');

这使
Nadales myresume

关于php - 为什么不转换工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5048401/

10-11 05:25