撇号和imagettftext()

时间:2014-06-05 04:28:16

标签: php 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()之前对其进行解码。我尝试在使用imagettftext之前将其转换为纯UTF-8,但它仍然无关紧要(它当前是ASCII;我在使用它之前检测到了编码)。

这不是我使用的字体,因为我尝试了几种字体。

为什么会发生这种情况的任何想法?

修改

有关详细信息,我正在使用simple_html_dom从其他页面抓取数据,然后将该信息用于图像,因此我不确定这是否会影响任何内容。它不应该因为我已经检测到编码和字符,似乎没有什么不合适。

这让我非常疯狂,我现在已经三天重新审视这件事并且没有意义。我已经尝试过PHP中的所有UTF-8解码可能性以及我能想到或发现的任何其他东西。我对我正在使用的字符串执行了rawurlencode(),它为撇号字符返回%92,这意味着它是撇号,而不是单引号或%60字符。任何帮助将不胜感激。谢谢。

修改

我已经确定这与撇号字符(ASCII中的%92)有关。我试过%27(单引号)并且运行正常。我见过的其他任何角色似乎都没有引起问题所以看起来它与撇号角色相似。

1 个答案:

答案 0 :(得分:0)

嗯,我不知道为什么会这样,但我想出了一个解决方法,以防其他人有这个问题(如果是这样,我感到你的痛苦,超级令人沮丧......)。

我这样做了:

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

它对url进行编码,找到撇号字符(%92)并用单引号字符(%27)替换它们。这不是问题的答案,但它是解决问题的方法。希望这有助于某人。