Синхронизация PHP exec

Мне нужно адресовать имена файлов UTF-8 с помощью команды php exec. Проблема в том, что команда php exec , похоже, не понимает utf-8. Я использую что-то вроде этого:

 echo exec('locale charmap'); 

возвращает ANSI_X3.4-1968

глядя на этот вопрос SO, решение выглядит так:

 echo exec('LANG=de_DE.utf8; locale charmap'); 

Но я все равно получаю тот же результат: ANSI_X3.4-1968

С другой стороны – если я выполню эту команду php в командной строке bash:

 php -r "echo exec('LANG=de_DE.UTF8 locale charmap');" 

Выход UTF-8. Поэтому вопросы:

  1. Почему существует другой результат, выполняемый командой php в bash и apache_module / web-странице?
  2. Как установить UTF-8 для exec если он запускается внутри веб-сайта в качестве модуля apache?

Related of "Синхронизация PHP exec"

Чтобы ответить на мой собственный вопрос, я нашел следующее решение:

установка переменной среды локали с помощью PHP

 $locale='de_DE.UTF-8'; setlocale(LC_ALL,$locale); putenv('LC_ALL='.$locale); echo exec('locale charmap'); 

Это устанавливает / возвращает UTF-8 . Поэтому я могу передавать специальные символы и умлауты командам linux shell.

У меня была аналогичная проблема. Моя программа возвращала мне несколько немецких писем вроде: üäöß. Вот мой код:

 $programResult = shell_exec('my script'); 

Переменная $programResult содержит немецкие умлауты, но они были сильно закодированы. Чтобы правильно закодировать его, вы можете вызвать utf8_encode() .

 $programResult = shell_exec('my script'); $programResult = utf8_encode($programResult);