使用imagettftext()时,如何处理字体文件不支持的字符?

tra*_*nte 5 php fonts gd utf-8 imagettftext

我在PHP GD库创建的图像中使用Verdana字体.

imagettftext($image, $fontSize, 0, 70, $y, $color, $font, $username );
Run Code Online (Sandbox Code Playgroud)

大多数情况下,imagettftext非常适合字符串.
但是我的一些用户在名字中使用了奇怪的字符/符号.
所以,当我尝试将他们的名字打印到图像时.例如:
在此输入图像描述

该用户使用????????? 符号.所以Verdana无法打印出来.

我用过这个:

$username=iconv('UTF-8', 'ASCII//TRANSLIT', $username);
Run Code Online (Sandbox Code Playgroud)

输出是这样的:
在此输入图像描述

(当前语言环境英语和德语之间的变化,从而可能当前区域无法处理这些字符.?????????)

现在看来似乎是不可能的音译?h,?n而不需要编写一个非常大的str_replace()块.像这样.

  • 所以我想知道是否可以检查字体(Verdana)是否可以显示这些符号.如果其中一个字符不能显示在字符串内,那么我可以将空字符串传递给imagettftext方法.我可以检查字体内支持的字符吗?或者创建一个包含Verdana支持的符号的字符映射,并检查我的字符串是否包含不支持的符号?
    (我认为由于这个问题不可能)

  • 或者也许是另一种解决方案,是否可以使用多种字体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

ome*_*kes 0

你设置了正确的区域设置吗?对于 iconv 可能是必要的 - https://www.php.net/manual/en/function.iconv.php#74101