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

标签 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() 并且看起来很好。我似乎无法恢复……有什么想法吗??

最佳答案

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/

相关文章:

php - php根据Id查询表中的所有行

javascript - 从数据库动态检索数据不起作用

php - 通过 PHP COM 读取 Excel 文件时出现编码问题

php - 从阿拉伯字符串 Php 中获取最后一个字母

r - ggplot2 PDF 输出中的 Unicode 字符

php - 从给定日期 php 获取下个月和上个月的最佳解决方案是什么

php - 显示 oscommerce 中类别下的子类别

c# - 如何更改此文件的编码?

sql - DBI::dbWriteTable,无效的多字节字符串

c# - 使用 UTF-8 编码反序列化 XML