我收到一个字符串,格式如下
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() 并且看起来很好。我似乎无法恢复……有什么想法吗??
最佳答案
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 手册页的一些快速研究。
关于PHP GD imagettftext 字符编码,符号缺失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11419036/