PHP exec меняет кодировку


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

echo exec('locale charmap');

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

Глядя на этот ИТАК, вопрос, решение выглядит так:

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/веб-странице?
  2. Как установить UTF-8 для exec, если он работает внутри веб-сайта как модуль apache?
Author: Community, 2012-12-20

2 answers

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

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

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

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

 26
Author: The Bndr, 2012-12-20 10:15:05

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

$programResult = shell_exec('my script');

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

$programResult = shell_exec('my script');
$programResult = utf8_encode($programResult);
 0
Author: MrD, 2016-02-11 13:08:35