2015-04-09 1 views
0

Например:PHP: Почему какой-либо нелатинский символ в iconv дает мне ошибку «незаконного символа»?

$text = "пд"; 
echo 'Plain : ', iconv("UTF-8", "us-ascii//TRANSLIT", $text), PHP_EOL; 

выходы

Plain : 
Notice: iconv() [function.iconv]: Detected an illegal character in input string in ... 

Я пытался добавить

setlocale(LC_CTYPE, 'en_US.UTF8'); 

, но это не имеет значения ...

ответ

0

Вы должны убедиться, что ваш исходный файл фактически сохраняется в UTF-8, но не в Windows-1251. В противном случае эти символы не будут представлять действительные секвенции UTF-8.

Update:

Правильно, Iconv // ПЕРЕВЕСТИ, кажется, зависит от региона. Он может работать корректно, если вы установите его на исходный язык . Так что в вашем примере это будет какой-то кириллический язык, я думаю, но не «en_US».

Но на самом деле, если вам нужна транслитерация только для одного языка, это гораздо более надежным, чтобы сделать простую таблицу перевода ОТСИДЕТЬ:

$trans = [ 
    'а' => 'a', 
    'д' => 'd', 
    'п' => 'p', 
    ... 
]; 
$translit = str_replace(array_keys($trans), array_values($trans), $source_string); 

Но если вам это нужно, чтобы работать для всех/неизвестных языков, вы будете должны использовать что-то более сложное, например http://php.net/manual/en/class.transliterator.php

+0

Да, я уверен, что файл сохранен в UTF-8. – WindBridges

+0

Хорошо, это не так просто. Я обновил ответ - см. Выше. Надеюсь, это поможет. – astax

Смежные вопросы