【发布时间】:2014-04-11 20:55:41
【问题描述】:
我在由 PHP GD 库创建的图像中使用 Verdana 字体。
imagettftext($image, $fontSize, 0, 70, $y, $color, $font, $username );
大多数情况下 imagettftext 非常适合字符串。
但是我的一些用户在他们的名字中使用了奇怪的字符/符号。
所以当我尝试将他们的名字打印到图像上时。例如:
此用户使用ɦɪɲɣƙƨєʌɾ
符号。所以 Verdana 无法打印它们。
我用过这个:
$username=iconv('UTF-8', 'ASCII//TRANSLIT', $username);
输出是这样的:
(当前语言环境在英语和德语之间发生变化。所以当前语言环境可能无法处理这些字符:ɦɪɲɣƙƨєʌɾ)
如果不写一个很大的str_replace() 块,似乎不可能将ɦ 音译为h、ɲ 为n。喜欢this。
所以我想知道是否可以检查字体(Verdana)是否可以显示这些符号。如果其中一个字符不能在字符串中显示,那么我可以将一个空字符串传递给
imagettftext方法。我可以检查字体中支持的字符吗?或者创建一个包含 Verdana 支持符号的字符映射,并检查我的字符串是否包含不支持的符号?
(我认为这是不可能的,因为this question)或者可能是另一种解决方案,是否可以在
imagettftext()中使用多种字体?
例如,首先尝试 Verdana,如果 Verdana 不涵盖该符号,则使用 Arial sans serif 等。或任何其他解决方案?
编辑:
我的文本中似乎 Verdana 不支持这些 Unicode 字符。
Verdana 支持的字符:http://www.fileformat.info/info/unicode/font/verdana/grid.htm
Verdana 未支持的字符:http://www.fileformat.info/info/unicode/font/verdana/missing.htm
【问题讨论】:
-
我编辑了标题和标签,如果您不喜欢,请随时更改。
-
您是否 100% 确定传入的数据是 UTF-8?因为如果不是,iconv() 就无法为您音译字符。您必须确保在第一个参数中指定正确的编码。 (也就是说,我不确定
ɦ首先是否应该应该音译为h,所以也许这是预期的结果。) -
我确定 UTF8。即使没有 iconv,最好知道 Verdana 是否可以打印它。所以如果字体不合适,我可以打印一个虚拟词。
标签: php utf-8 fonts gd imagettftext