0

我一直在努力弄清楚这里发生了什么。我正在尝试使用 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为撇号字符返回 a ,这意味着它是一个撇号,而不是单引号或%60字符。任何帮助将不胜感激。谢谢你。

编辑

我确定这仅与撇号字符(ASCII 中的 %92)有关。我已经尝试使用 %27 (单引号)并且效果很好。我见过的其他字符似乎也没有导致问题,所以看起来它与撇号字符隔离。

4

1 回答 1

0

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

我这样做了:

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

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

于 2014-06-06T04:39:06.857 回答