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

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

echo exec('locale charmap');

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

смотрим этой поэтому вопрос, решение lookes вроде этого:

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?

2 ответов


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

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

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

это устанавливает в / returns UTF-8. Поэтому я могу передавать специальные символы и umlauts командам оболочки linux.


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

$programResult = shell_exec('my script');

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

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