Какие факторы влияют на успешное преобразование iconv () TRANSLIT? - PullRequest
11 голосов
/ 19 марта 2012

Я пытаюсь определить, какие факторы окружающей среды или другие факторы влияют на результат вызова iconv() с помощью опции TRANSLIT.

Следующий код имеет разные результаты для меня локально при запуске через Apache и CLI.

<?php
    setlocale(LC_ALL, 'en_GB.UTF-8');
    header('Content-type: text/html; charset=utf-8'); // for web     

    $utf8_string = "Pádraig's naïve café";

    echo iconv('UTF-8', 'ASCII//IGNORE//TRANSLIT', $utf8_string);
?>

Ожидаемый результат: Padraig's naive cafe

Результат в веб-браузере: (empty string)

Результат из CLI: P'adraig's na"ive cafe

В некоторых системах я получаю ожидаемый результат, но не могу точно определить, почему.

Какие факторыповлиять на конверсию, и какие шаги я должен предпринять, чтобы увеличить шанс на хороший результат?

Ответы [ 2 ]

4 голосов
/ 19 марта 2012

Локаль - это , влияющая на iconv транслитерацию.Однако следует прочесть предупреждение на странице руководства setlocale Документы :

Информация о локали поддерживается для каждого процесса, не по теме.Если вы используете PHP на многопоточном серверном API, таком как IIS или Apache, в Windows, вы можете столкнуться с внезапными изменениями настроек локали во время работы скрипта, хотя сам скрипт никогда не вызывал setlocale () .Это происходит из-за того, что другие сценарии выполняются в разных потоках одного и того же процесса в одно и то же время, изменяя языковой стандарт для всего процесса с помощью setlocale () .

Таким образом, вы можете установитьязык, но он изменился где-то еще.Пока локаль точно такая же, вы получите те же результаты.

Документацию и исходный код iconv вы найдете здесь: http://www.gnu.org/software/libiconv/ - обычно это библиотека, используемая PHP.

0 голосов
/ 19 марта 2012

setlocale возвращает ложь?Какую ОС вы используете?

Вы можете попробовать запустить locale -a на своем компьютере, чтобы увидеть, какие локали установлены, setlocale должен вернуть указанную вами локаль.

Выполнить приведенный выше пример наCentos с en_GB.UTF-8 в списке locale -a возвращает ожидаемый результат.

...