Апострофы и imagettftext()

Я всю жизнь пытался понять, что здесь происходит. Я пытаюсь использовать imagettftext() для размещения текста на изображении, которое я создаю в PHP. У меня есть текст:

$line = "I'm using this string";

Когда эхо отсутствует, оно отображается точно так же. Последняя переменная imagettftext() — это строка, которая помещает текст на изображение. Итак, когда я делаю это:

echo $line."</br>";

imagettftext($my_img, $font_size, 0, $x+4, (($font_size+$margin_top)*$line_number)+$new_shadow_addition, $shadow_colour, $font, $line);

Он правильно повторяет строку, но затем, когда я смотрю на изображение, он отображает его как

I□m using this string

И так для любого другого апострофа. Строка правильная, но она каким-то образом кодирует или декодирует ее перед imagettftext(). Я пытался преобразовать его в чистый UTF-8 перед использованием imagettftext, но это все равно не имело значения (в настоящее время он в ASCII; я обнаружил кодировку до того, как ее использовал).

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

Любые идеи, почему это происходит?

РЕДАКТИРОВАТЬ

Для получения дополнительной информации я использую simple_html_dom для сканирования данных с другой страницы, а затем использую эту информацию для изображения, поэтому я не уверен, повлияет ли это на что-либо. Этого не должно быть, потому что я обнаружил кодировку и символы, и ничего не кажется неуместным.

Это сводит меня с ума, я пересматриваю это уже три дня, и это не имеет смысла. Я пробовал все возможности декодирования UTF-8 в PHP и все, что я мог придумать или найти. Я сделал rawurlencode() для строки, которую я использую, и она возвращает %92 для символа апострофа, что означает, что это апостроф, а не одиночная кавычка или символ %60. Любая помощь будет принята с благодарностью. Спасибо.

РЕДАКТИРОВАТЬ

Я определил, что это связано только с символом апострофа (%92 в ASCII). Я пробовал с% 27 (одинарная кавычка), и это отлично работает. Ни один другой символ, который я видел, не вызывает проблемы, поэтому похоже, что он изолирован от символа апострофа.


person MillerMedia    schedule 05.06.2014    source источник
comment
Да, я пробовал html_entity_decode() и trim() для текста, и это тоже не работает...   -  person MillerMedia    schedule 05.06.2014
comment
да, я пропустил этот шрифт, мой плохой.   -  person Jacky Cheng    schedule 06.06.2014


Ответы (1)


Ну, я не знаю, ПОЧЕМУ это произошло, но я нашел обходной путь на случай, если у кого-то еще возникнет эта проблема (и если это так, я чувствую вашу боль, очень расстраивающую...).

Я сделал это:

$line = rawurlencode($line);
$line = str_replace('%92', '%27', $line);
$line = rawurldecode($line);

URL-адрес кодирует его, находит символы апострофа (%92) и заменяет их символом одинарной кавычки (%27). Это не совсем ответ на вопрос, но это решение проблемы. Надеюсь, это поможет кому-то.

person MillerMedia    schedule 06.06.2014