ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 使用GD(imagettftext())和UTF-8字符

2019-09-26 12:39:40  阅读:216  来源: 互联网

标签:php image utf-8 special-characters gd


只是为了记录 – 我在这里的第一个问题,但希望不是我在社区的最后一个输入.
但这不是我在这里的原因.

我目前正在开发一个简单的系统,必须生成一个带有文本的图像. Everthing进展顺利,直到我意识到GD无法处理UTF-8字符

ā, č, ž, ä, ø, é

等等.

要清理 – 我正在使用imagettftext()

试图解决我的问题我深入谷歌并返回了一些解决方案,遗憾的是,他们都没有完全解决我的问题.
目前我正在使用我在此主题中找到的脚本 – PHP function imagettftext() and unicode

private function properText($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;
        }
    }

    return $out;

}

并且它适用于某些字符但不是所有字符,例如,变音符号未正确转换.

所以在这一点上我不知道在哪里和什么要找,因为我无法预测用户输入.更确切地说,系统从xml提要中提取艺术家名称并使用数据生成图像(我不打算支持象形文字).

我确保通过使用PHP的mb_detect_encoding()从feed中收集的数据确实是UTF-8,并且我确保当前未正确显示的所有字符都被放入我正在输入的字体文件中. imagettftext()
通过windows charmap工具检查它的功能.

希望我能在这里找到答案,并提前感谢您的帮助!

编辑

澄清 – 字符未正确显示,或者更确切地说,字符不正确.这是一个截图 –

它应该是“JoséGonzález”

编辑No2

对从xml提要检索的数据使用bin2hex()函数会返回此信息.

José González -> 4a6f73c3a920476f6e7ac3a16c657a
// input -> bin2hex(input)

编辑 – 修复

当我继续我的研究时,我想出了一个问题的答案,这段代码做到了!

$text = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8");
$text = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$text);
return($text); 

现在所有困扰我的角色都能正确显示!

解决方法:

当我继续我的研究时,我想出了一个问题的答案,这段代码做到了!

private function properText($text){
    $text = mb_convert_encoding($text, "HTML-ENTITIES", "UTF-8");
    $text = preg_replace('~^(&([a-zA-Z0-9]);)~',htmlentities('${1}'),$text);
    return($text); 
}

现在所有困扰我的角色(以及我见过的所有新角色)都能正确显示!

标签:php,image,utf-8,special-characters,gd
来源: https://codeday.me/bug/20190926/1820133.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有