仅供记录 - 我在这里提出的第一个问题,但希望不是我在社区中的最后一个意见。
但这不是我来这里的原因。
我目前正在开发一个简单的系统,它必须生成带有文本的图像。一切都很顺利,直到我意识到 GD 无法处理 UTF-8 字符,例如
ā、č、ž、ä、ø、é
等等。
为了澄清事情 - 我正在使用图像ttftext() http://php.net/manual/en/function.imagettftext.php
为了解决我的问题,我深入谷歌并返回了一些解决方案,遗憾的是,没有一个解决方案能够完全解决我的问题。
目前我正在使用我在这个线程中找到的这个脚本 -PHP 函数 imagettftext() 和 unicode https://stackoverflow.com/questions/198007/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 feed 中提取艺术家姓名,并使用这些数据生成图像(我不打算支持象形文字)。
我已经使用 PHP 确保从 feed 收集的数据确实是 UTF-8mb_detect_encoding() http://php.net/manual/en/function.mb-detect-encoding.php并且我已确保当前未正确显示的所有字符都已添加到我提供给的字体文件中图像ttftext()通过 windows 检查它的功能charmap tool.
希望我能在这里找到答案,并提前感谢您的帮助!
edit
澄清一下 - 字符未正确显示,或者更准确地说,被格式错误的字符替换。这是一个屏幕截图 -
应该是“何塞·冈萨雷斯”
edit No2
Using bin2hex()从 xml feed 检索到的数据的函数返回 this.
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);
现在所有困扰我的字符都正确显示了!