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

Php 使用GD(imagettftext())和UTF-8字符,php,image,utf-8,gd,special-characters,Php,Image,Utf 8,Gd,Special Characters,这是我的第一个问题,希望不是我在社区中的最后一个问题。 但这不是我来这里的原因 我目前正在开发一个简单的系统,它必须生成一个带有文本的图像。一切都进行得很顺利,直到我意识到GD无法处理UTF-8这样的字符 ā,č,ä,ø,ò 等等 把事情弄清楚-我正在用 为了解决我的问题,我深入谷歌,找到了一些解决方案,但遗憾的是,没有一个能完全解决我的问题。 目前我正在使用在该线程中找到的脚本- 编辑-修复 当我继续我的研究时,我为我的问题找到了答案,这段代码做到了 $text = mb_convert_en

这是我的第一个问题,希望不是我在社区中的最后一个问题。 但这不是我来这里的原因

我目前正在开发一个简单的系统,它必须生成一个带有文本的图像。一切都进行得很顺利,直到我意识到GD无法处理UTF-8这样的字符

ā,č,ä,ø,ò

等等

把事情弄清楚-我正在用

为了解决我的问题,我深入谷歌,找到了一些解决方案,但遗憾的是,没有一个能完全解决我的问题。 目前我正在使用在该线程中找到的脚本-

编辑-修复


当我继续我的研究时,我为我的问题找到了答案,这段代码做到了

$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); 
}

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

当我继续我的研究时,我为我的问题找到了答案,这段代码成功了

$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); 
}

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

首先确保您的IDE没有使用UTF8以外的其他编码保存文件。例如,新Intellij IDEA 9在WINDOWS平台上将UTF-8更改为WINDOWS-1250。如果您没有注意到这一点,并且您将使用常量字符串进行测试,那么调试是非常疯狂的。

什么不工作?为什么输出不是您期望的?您使用的字体是否实际包含所需的字符?我在日语中使用的是
imagegettfext
,所以Unicode字符一般不会有问题。是的,正如我在原始帖子中所说的,我已经确保所有当前未正确显示的字符都被输入到字体文件中。工作的关键是输出字符没有正确显示,或者更准确地说,被格式错误的字符替换。这是一个屏幕截图——它应该读为“JoséGonzález”您在那里遇到的错误:这肯定是一个编码问题,比如在ANSI中打印一些UTF-8字符。您的文本真的正确编码为UTF-8吗?请显示字符串的
bin2hex()
。您应该添加它作为答案并接受它。将来可能对其他人有用。仍然很奇怪,因为函数应该直接接受UTF-8。不过,这个特殊的
preg\u replace
回调似乎很荒谬。真的有用吗?我也有同样的问题。你到底是怎么修好的?您的代码不会返回带有重音符号的文本。