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

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

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

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

<?php
  //Создаём "чистый" холст для рисования шириной 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 Вы уже умеете, с чем я Вас и поздравляю!