您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

PHP函数imagettftext()和unicode

PHP函数imagettftext()和unicode

这是最终对我有用的解决方案:

$text = "你好";
// Convert UTF-8 string to HTML entities
$text = mb_convert_encoding($text, 'HTML-ENTITIES',"UTF-8");
// Convert HTML entities into ISO-8859-1
$text = html_entity_decode($text,ENT_NOQUOTES, "ISO-8859-1");
// Convert characters > 127 into their hexidecimal equivalents
$out = "";
for($i = 0; $i < strlen($text); $i++) {
    $letter = $text[$i];
    $num = ord($letter);
    if($num>127) {
      $out .= "&#$num;";
    } else {
      $out .=  $letter;
    }
}

字符串转换为HTML实体是可行的,除了函数imagettftext()不接受命名实体。例如,

&#26085;&#26412;&#35486;

可以,但是

&ccedil;

不是。转换回ISO-8859-1,将命名实体转换回字符,但是还有第二个问题。imagettftext()不支持值大于> 127的字符。最终的for循环将这些字符编码为十六进制。此解决方案对我正在使用的文本有效(包括日语,中文和葡萄牙语的加重拉丁字符),但是我不确定100%可以在所有情况下都适用。

所有这些体操都是必需的,因为imagettftext()在我的服务器上实际上并不接受UTF-8字符串。

php 2022/1/1 18:17:39 有455人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶