Проблемы с кодировкой при рисовании текста в 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 Вы уже умеете, с чем я Вас и поздравляю!
-
- Михаил Русаков
Комментарии (2):
Прямоугольники вместо текста на русском.
Ответить
Значит у Вас нет данного шрифта.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.