У меня возникла та же проблема со скриптом, который будет отображать текст на изображении и выводить его. Проблема заключалась в том, что из-за разных браузеров (или сложности кода / паранойи, в зависимости от того, как вы хотите об этом думать), у меня не было возможности узнать, какая кодировка помещается в массив $_GET
.
Вот как я решил проблему.
$item_text = $_GET['text'];
# detect if the string was passed in as unicode
$text_encoding = mb_detect_encoding($item_text, 'UTF-8, ISO-8859-1');
# make sure it's in unicode
if ($text_encoding != 'UTF-8') {
$item_text = mb_convert_encoding($item_text, 'UTF-8', $text_encoding);
}
# html numerically-escape everything (&#[dec];)
$item_text = mb_encode_numericentity($item_text,
array (0x0, 0xffff, 0, 0xffff), 'UTF-8');
Это решает любую проблему, когда imagettftext
не может обрабатывать символы выше # 127, просто заменяя ВСЕ символы (включая многобайтовые символы Юникода) на их числовые символы HTML - "A" для "A", "B" для "B" и т. д. - на которые заявлена поддержка справочной страницы .