Почему не работает транслит? - PullRequest
3 голосов
/ 19 февраля 2011
setlocale(LC_ALL, 'en_US.UTF8');
$string= 'ṃỹṛèşưḿĕ';
echo iconv('UTF-8', 'ASCII//TRANSLIT', $string);

делает ошибку ...

должен напечатать: myresume

1 Ответ

2 голосов
/ 19 февраля 2011

Это зависит от библиотеки 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
...