PHP GD imagettftext字符编码,符号缺失

时间:2012-07-10 17:52:12

标签: php encoding utf-8 gd

我有一个字符串格式化为

Ciel Spa at SLSâ„¢ is a celestial dreamscape

我有一个格式化脚本,将其更改为

Ciel Spa at SLS™ is a celestial dreamscape

脚本会更改编码

return iconv("UTF-8", "ISO-8859-1//TRANSLIT//IGNORE", $str)

上述iconv()通常会将商标符号作为普通字符TM返回。这对我来说不起作用,所以我将符号替换为我后来可以捕获的字符串。

str_replace("(TM)","™",$str);

当我在浏览器中查看源代码时,这很有用,但是当我将此文本推送到imagettftext()时,商标符号会被忽略,从而有效地制作字符串

Ciel Spa at SLS is a celestial dreamscape

但当然呈现为图像。

我知道我使用的字体支持商标符号,但我不确定它为什么会消失。 mb_detect_encoding()返回null,而对于我的大多数字符串,它返回UTF-8。

我已准备好进行坚韧不拔的肮脏解决方案,因为到目前为止还没有任何效果。我尝试使用html_entity_decode()和str_replace()的组合无济于事。同一格式化脚本的早期版本组合了一长串UTF垃圾字符替换,而不更改字符串的编码,然后将其提供给imagettftext(),它看起来很好。我似乎无法回复......任何想法?

1 个答案:

答案 0 :(得分:0)

iso-8859-1字符编码中根本没有商标符号。您之间没有显示任何内容的原因是因为您要使用超出此字符集范围的符号替换有效iso-8859-1字符串的一部分。

您可以尝试使用

更改utf-8到iso-8859-1编码
function decode_characters($info) 
{ 
    $info = mb_convert_encoding($info, "HTML-ENTITIES", "UTF-8"); 
    $info = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$info); 
    return($info); 
} 

此代码来自对php手册页的一些快速研究。