Php скрипт русские буквы

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

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

В самом начале страницы index.php я указываю, как положено

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

Но вывод двух утилит не изменяется ни при каких кодировках!
catdoc

$text = shell_exec('/usr/bin/catdoc /test.doc'); echo $text; // выводит русский текст латиницей
$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 и перегружал Апачи. Ничего не меняется.

shell_exec это плохой вариант по части безопасноти. Попробуйте PHPOffice использовать. Пример смог найти только в коде теста, но думаю что при желании можно будет разобраться: https://github.com/PHPOffice/PHPWord/blob/develop/.

Я изменил вопрос, так как не там устанавливал кодировку. Нужно было в самом начале кода рнр ставить оператор header, а я менял в рнр.ini и в заголовке HTML. Теперь я убрал вообще HTML и вывод echo СТАЛ ЗАВИСЕТЬ от кодировки в headere. То есть русские буквы в echo «Русский текст»; стали видны только при установке utf-8 в headere.

Да я попробовал по Вашему совету mb_internal_encoding.
Ну она устанавливает какую-то переменную для библиотеки mb и сама же ее считывает и зачем мне она? Пример на phpword мне тоже cейчас не нужен, так как у меня файлы doc, а не docx.

У меня проблема в том, что не меняется вывод утилит на экран (через echo), независимо от того, что я изменяю header. Что мне нужно изменить, чтобы они выводили по русски?

Проблемы безопасности меня тоже сейчас не интересуют — мне нужно всего лишь определить кодировку или гарантированно сконвертировать вывод утилит в UTF-8 для передачи в другой модуль программы.

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

Читайте также:  Html text typing animation

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

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

webru

Укажите принудительно локаль перед shell_exec

$locale='ru_RU.UTF-8'; setlocale(LC_ALL, $locale); putenv('LC_ALL='.$locale); $text = shell_exec('/usr/bin/catdoc /test.doc');

Источник

Перекодировка текста UTF-8 и WINDOWS-1251

Проблема кодировок часто возникает при написании парсеров, чтении данных из xml и CSV файлов. Ниже представлены способы эту проблему решить.

windows-1251 в UTF-8

$text = iconv('windows-1251//IGNORE', 'UTF-8//IGNORE', $text); echo $text;
$text = mb_convert_encoding($text, 'UTF-8', 'windows-1251'); echo $text;

UTF-8 в windows-1251

$text = iconv('utf-8//IGNORE', 'windows-1251//IGNORE', $text); echo $text;
$text = mb_convert_encoding($text, 'windows-1251', 'utf-8'); echo $text;

Когда ни что не помогает

$text = iconv('utf-8//IGNORE', 'cp1252//IGNORE', $text); $text = iconv('cp1251//IGNORE', 'utf-8//IGNORE', $text); echo $text;

Иногда доходит до бреда, но работает:

$text = iconv('utf-8//IGNORE', 'windows-1251//IGNORE', $text); $text = iconv('windows-1251//IGNORE', 'utf-8//IGNORE', $text); echo $text;

File_get_contents / CURL

Бывают случаи когда file_get_contents() или CURL возвращают иероглифы (Алмазные борÑ) – причина тут не в кодировке, а в отсутствии BOM-метки.

$text = file_get_contents('https://example.com'); $text = "\xEF\xBB\xBF" . $text; echo $text;

Ещё бывают случаи, когда file_get_contents() возвращает текст в виде:

Это сжатый текст в GZIP, т.к. функция не отправляет правильные заголовки. Решение проблемы через CURL:

function getcontents($url) < $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $output = curl_exec($ch); curl_close($ch); return $output; >echo getcontents('https://example.com');

Источник

Русские буквы и символы в PHP скриптах и базе данных MySQL

Проблемы с кодировкой в PHP

Follow us on Twitter Follow us on rss

При использовании локального сервера на компьютере под управлением Windows, будь то Denwer или лбой другой набор, возникает проблема с отображением русских символов и букв при выводе страницы в браузер. Причины этой проблемы могут быть разными, в данной статье я расскажу о некоторых из них и постараюсь помочь с их решением.

Обычный вывод в PHP

Если не отображаются русские символы при обычном выводе через echo, появляются знаки вопроса (?) вместо букв, то проблемой может быть неверно указанная кодировка файла. Стандартная программа блокнот Windows по умолчанию сохраняет файл в кодировке ANSI, в результате чего появляется такая проблема как на картинке.

Знаки вопроса вместо букв

Знаки вопроса вместо букв

Решить проблему можно сохранив файл в формате UTF-8, для этого в блокноте достаточно нажать Файл->Сохранить как… и в появившемся окне выбрать тип файла «Все файлы» и выбрать кодировку UTF-8. После чего нажать кнопку сохранить и подтвердить замену файла.

Сохранение файла в кодировке UTF-8

Сохранение файла в кодировке UTF-8

Открываем вновь в браузере и видим, что проблема решена.

Нормальное отображение символов в PHP

Нормальное отображение символов в PHP

Этот способ показан для программы Блокнот Windows, т.к. чаще всего проблема возникает именно с ней у начинающих программистов PHP. Для программирования лучше использовать специальный текстовый редактор (Sublme Text, Notepad++ и др.) или IDE PhpStorm, они по умолчанию работают UTF-8.

Читайте также:  What is python django

Ошибки с русским текстом в базе данных MySQL

Проблема проявляет себя во время сохранения данных в базе данных MySQL. Обычно это происходит из-за того, что пользователь, при создании новой базы данных и таблицы, не выбирает сравнение(кодировку) и она устанавливается по умолчанию как latin1_swedish_ci.

СУБД возвращает ошибку при попытке добавить русский текст в поле записи.

#1366 — Incorrect string value

Ошибка при добавлении русского текста в запись таблицы СУБД MySQL

Ошибка при добавлении русского текста в запись таблицы СУБД MySQL

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

Знаки вопроса при выводе данных из базы данных MySQL

Иногда возникает проблема с отображением данных, полученных из базы данных MySQL. Обычно вместо русских символов выводятся знаки вопроса.

Проблема решается путем установления кодировки подключения к базе данных.

Если вы пользуетесь старыми функциями для работы с БД MySQL, то сразу после функций подключения к базе данных необходимо добавить:

и при этом советую вам почитать про PDO, так как библиотека для работы с БД MySQL, включающая функции mysql_connect(), mysql_select_db() и прочие уже устарела, а в версии PHP 7 вообще убрана.

Если вы работаете с PDO, то в DSN(способ соединения с БД у PDO) необходимо в параметре charset устанавливать кодировку utf8. Пример соединения с кодировкой:

$ms_host = "localhost"; // Хост $ms_db = ""; // Имя БД $charset = "utf8"; // Кодировка соединения $dsn = "mysql:host=$ms_host;dbname=$ms_db;charset=$charset";

Если ничего не помогает

Попробуйте после подключения к БД добавить mysql_query(«SET NAMES utf8»);

Попробуйте в начале PHP скрипта добавить header(‘Content-Type: text/html; charset=utf8’);

А так же не забывайте о meta-теге между и

Буду рад, если кому-нибудь помогли данные советы. Вы можете задать вопрос со своей проблемой в комментарии и мы попробуем вместе разобраться. Удачи в устранении ошибок и багов!

Для вас это может быть интересно:

Русские буквы и символы в PHP скриптах и базе данных MySQL : 2 комментария

  1. Скейли 19.10.2016 Нормально отображаться русский текст начал только после указания кодировки UTF-8(без BOM) в notepad++, хотя meta charset использовал. Почему разрабы не могут проблемы кодировкой раз и навсегда решить, указывать приходится во всех местах. 🙁
  1. KoT 08.01.2021 А я использовал кодировку UTF-8 с BOM и так же нажимал преобразовать в UTF-8 с BOM и русский текст отобразился

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  • Qt (4)
  • SEO (5)
  • Администрирование (4)
  • Алгоритмы (6)
  • Заработок (1)
  • Операционные системы (4)
  • Ответы (2)
  • Программирование (23)
  • Сайтостроительство (11)
  • Чынгыз к записи Как найти сумму и произведение элементов массива на C++
  • Чынгыз к записи Как найти сумму и произведение элементов массива на C++
  • Di к записи Создание Excel документа на PHP (генерация .xls файлов)
  • Илья к записи Русские символы(буквы) при вводе/выводе в консоль на C++
  • LedsHack к записи Найти максимальный и минимальный элемент массива на C++

Источник

Проблемы с кодировкой при рисовании текста в PHP

Проблемы с кодировкой при рисовании текста в PHP

В прошлой статье мы с Вами обсуждали рисование текста в PHP, и в конце статья я Вам сообщил, что таким способом Вы русские буквы (кириллицу) не выведите. И как рисовать русские буквы на изображении в PHP мы с Вами разберём в этой статье.

Читайте также:  Адаптивная верстка на FLEX CSS

Давайте для начала разберём, почему так происходит, почему кириллицу PHP не рисует. Всё дело в том, что встроенные шрифты в PHP не содержат региональной привязки, поэтому русские буквы и не выводятся. Способов выхода из этой ситуации несколько, однако, мы с Вами разберём самый простой и, на мой взгляд, лучший вариант. Заключается он в переводе всех кириллических символов в Unicode. И для этого мы используем функцию iconv(). Не могу вспомнить, говорил я об этой очень полезной функции или нет, но она занимается переводом из одной кодировки в другую. Ладно, давайте приведу пример:

//Создаём «чистый» холст для рисования шириной 200 пикселей и высотой 300 пикселей
$i = imageCreate(200, 300);
//Делаем белый фон
$color = imageColorAllocate($i, 255, 255, 255);
//Устанавливаем красный цвет
$color = imageColorAllocate($i, 255, 0, 0);
//Переводим текст из кириллицы в Unicode
$russian_text = iconv(«CP1251», «UTF-8», «Сайт MyRusakov.ru»);
//Рисуем текст ttf-шрифтом
imageTtfText($i, 16, 94, 150, 200, $color, «times.ttf», $russian_text);
//Отправляем заголовок с mime-type
Header(«Content-type: image/jpeg»);
//Выводим изображение
imageJpeg($i);
//Уничтожаем идентификатор и освобождаем ресурсы сервера
imageDestroy($i);
?>

Ключевой момент в этом примере — использование функции iconv(string in_charset, string out_charset, string s). Данная функция переводит строку s из кодировки in_charset в кодировку out_charset. То есть в примере выше мы переводили из кодировки windows-1251 (CP1251) в Unicode (UTF-8). И, разумеется, теперь русский текст выводится без проблем.

За мою уже достаточно долгую практику, функцию iconv() я использовал столько раз, что не сосчитать. Фактически, это универсальная функция, которая позволяет бороться с практически любыми проблемами, связанными с кодировками, поэтому запомните её, и если вдруг у Вас вместо русского текста выводится непонятно что, то подумайте об её использовании. А рисовать русский текст в PHP Вы уже умеете, с чем я Вас и поздравляю!

Создано 01.04.2011 14:02:46

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 2 ):

    Прямоугольники вместо текста на русском.

    Значит у Вас нет данного шрифта.

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Оцените статью