setlocale(LC_ALL, 'en_US.UTF8');
$string= 'ṃỹṛèşưḿĕ';
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);
ошибается...
следует печатать: myresume
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
.
Пока у нас не будет поддержки транслитераторов ICU в PHP (следующая версия), не будет надежного способа выполнить это преобразование (хотя, если вы хотите только удалить метки, есть другие решения). В разрабатываемой версии PHP с расширением intl можно сделать это:
<?php
$t = Transliterator::create("latin; NFKD; [^\u0000-\u007E] Remove; NFC");
echo $t->transliterate('Ναδάλης ṃỹṛèşưḿĕ');
который дает
Nadales myresume