@andrei2018

Что изменить, чтобы кириллица выводилась правильно из программы, запускаемой из PHP?

Меня не слушаются настройки кодировки cайта (Apache+PHP7.2 на Ubuntu).
Есть две утилиты конвертации документов doc в txt.
В консоли (Linux) обе отображают кириллицу корректно! А на сайте одна выводит латиницей, другая вопросиками.

В самом начале страницы index.php я указываю, как положено
<?php
header('Content-Type: text/html; charset=utf-8');

И сharset влияет на отображение русского текста в операторе echo. Если я выбираю utf-8, то echo выводит текст русскими буквами:
echo "Русский";

Но вывод двух утилит не изменяется ни при каких кодировках!
catdoc
$text = shell_exec('/usr/bin/catdoc /test.doc');
echo $text; // выводит русский текст латиницей

soffice

$text = shell_exec( '/usr/bin/soffice --headless --convert-to txt --cat /test.doc');
echo $text; //выводит вопросики
$text = shell_exec(/usr/bin/soffice --headless --convert-to "txt:Text (encoded):UTF-8" --cat /test.doc);
echo $text; // выводит вопросики


Вообще-то мне и не нужно, чтобы на сайте был вывод из этих утилит. Мне нужно конвертировать их вывод в UTF-8 и передать дальше. Но я не могу конвертировать, пока не определю кодировку и подумал, что проще всего определить на сайте.

В РНР.ini и в .htaccess и в headere я устанавливал utf-8, windows-1251, ASCII, ANSI, KOI8-R и перегружал Апачи. Ничего не меняется.
  • Вопрос задан
  • 8035 просмотров
Пригласить эксперта
Ответы на вопрос 3
t1gor
@t1gor
Web developer
shell_exec это плохой вариант по части безопасноти. Попробуйте PHPOffice использовать. Пример смог найти только в коде теста, но думаю что при желании можно будет разобраться: https://github.com/PHPOffice/PHPWord/blob/develop/...

Если все же надумаете использовать shell-ы, не забудьте добавить escape-ы:

А по кодировкам, вы пробовали mb_internal_encoding(XXX);
Ответ написан
@andrei2018 Автор вопроса
В общем проблема оказалась вот в чем:
Оказалось, что для правильного отображения кириллицы на сайте нужно обязательно указать в параметрах catdoc одну из русских кодировок utf-8, koi8-r, cp866, cp1251 (не windows-1251). Без этого ключа вывод на сайте идет латиницей, несмотря на header.

Если я ставлю одну из этих кодировок, то вывод на экране зависит от установки в headere!

Вопрос закрыт! С soffice видимо та же проблема, разберусь. Точнее проблема с shell_exec. Как будто выходная кодировка по умолчанию не проходит через shell_exec. Какая она я так и не понял. В доке на сатdoc написано, что внутренняя кодировка unicode. В консоли (Ubuntu) сatdoc работает нормально без ключа -d.
Ответ написан
Комментировать
webru
@webru
Веб программист
Укажите принудительно локаль перед shell_exec

$locale='ru_RU.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
$text = shell_exec('/usr/bin/catdoc /test.doc');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы