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

出错...

应该打印:myresume

4

1 回答 1

3

这取决于 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 音译器(下一个版本),才会有可靠的方法来可靠地进行这些转换(尽管如果您只想删除标记,还有其他解决方案)。在 PHP 的开发版本中,使用 intl 扩展,可以这样做:

<?php
$t = Transliterator::create("latin; NFKD; [^\u0000-\u007E] Remove; NFC");
echo $t->transliterate('Ναδάλης ṃỹṛèşưḿĕ');

这使

Nadales myresume
于 2011-02-19T04:55:48.867 回答