我正在使用PHP函数imagettftext()将文本转换为GIF图像。我正在转换的文本具有Unicode字符,包括日语。在我的本地计算机(Ubuntu 7.10)上一切正常,但是在我的Web主机服务器上,日语字符混乱。是什么造成了差异?一切都应编码为UTF-8。

webhost服务器上的图像损坏: http://www.ibeni.net/flashcards/imagetest.php

从本地计算机复制正确的图像: http://www.ibeni.net/flashcards/imagetest.php.gif

从本地计算机复制phpinfo(): http://www.ibeni.net/flashcards/phpinfo.php.html

从我的webhost服务器复制phpinfo(): http://example5.nfshost.com/phpinfo

代码: 通用标签

有帮助吗?

解决方案

这是最终对我有用的解决方案: 通用标签

将字符串转换为HTML实体是可行的,但函数imagettftext()不接受命名实体。例如, 通用标签

可以,但是 通用标签

不是。转换回ISO-8859-1,将命名的实体转换回字符,但是存在第二个问题。imagettftext()不支持值大于> 127的字符。最终的for循环将这些字符编码为十六进制。此解决方案对我正在使用的文本有效(包括日语,中文和葡萄牙语的加重拉丁字符),但我不确定100%可以在所有情况下都可以使用。

所有这些体操都是必需的,因为imagettftext()在我的服务器上并不真正接受UTF-8字符串。

其他提示

我在脚本中遇到了同样的问题,该脚本将在图像中渲染文本并将其输出。问题是,由于不同的浏览器(或代码强度/偏执狂,无论您想使用哪种方式),我都无法知道在$_GET数组中放置了哪种编码。

这是我解决问题的方式。 通用标签

这可以解决imagettftext无法处理#127以上字符的任何问题,只需将所有字符(包括多字节Unicode字符)更改为它们的HTML数字字符实体-“A”即可。代表“ A”,“B”代表“ B”等。手册页声称支持。

我有同样的问题。将字体从otf转换为ttf很有帮助。您可以使用FontForge(在标准存储库中提供)进行转换。

我主要怀疑是您用于渲染的字体。

根据 http://fr3.php.net/imagettftext ,不同版本的GDphp使用的库可以显示不同的行为。

    您本地计算机上的
  • GD版本: 2.0或更高版本
  • Web主机服务器上的GD版本:已捆绑(兼容2.0.34)

    编辑: 另一个想法:您可以验证$text = '日本語';确实以这种方式保存在生产服务器上吗?您的脚本可能存在编码问题。

    下一步编辑: BKB已经提出了该建议。因此,以防万一,原因是:他首先回答了;-)

生产机器上是否存在该特定字体文件?如果使用FTP上传文件,是否使用二进制编码?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top