unicode — 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.

Обновить:

Правильно, iconv // TRANSLATE зависит от локали. Это может работать правильно, если вы установите его на источник языковая локаль. Так что в вашем примере это будет какой-то кириллический языковой стандарт, я думаю, но не 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]