当我使用带有西班牙语的$ text调用下面的代码时,我得到了带图像的正确文本但是 当我用加泰罗尼亚语的$ text调用相同的代码时,我没有在图像中得到正确的文本。我知道西班牙语特殊字符á和é正在运作,但加泰罗尼亚字符à和è无效。
请帮我解决这个问题。
<?php
//$text = "Sándalo Ayurvédicos"; // Text in Spanish
$text = "Sàndal Ayurvèdics"; // Text in Catalan
//$text = utf8_encode($text);
//$text = utf8_decode($text);
$img = "sample";
$im = imagecreatetruecolor(25, 350);
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($im, $black);
$textcolor = imagecolorallocate($im, 73, 100, 23);
imagestringup($im, 3, 10, 340, $text,$textcolor);
imagepng($im, $img.'.png');
imagedestroy($im);
$imagename = $img.'.png';
print '<img src="'.$imagename.'"></img>';
?>
答案 0 :(得分:2)
PHP中的$string
参数非常模糊,因为PHP中的字符串不带有编码,PHP根本不统一字符串的编码。换句话说,它们是字节数组,而不像字符串通常是高级语言,其中所有字符串都有内部统一的unicode编码,这样的参数不会有歧义。
我从评论中读到字符串必须是ISO-8859-2,它只支持á
但不支持à
。
您可以使用记录的imagettftext
来获取UTF-8编码的字符串,这很好,因为至少可以绘制所有字符。但它需要TrueType字体,我在这里使用Arial Unicode:
<?php
header("Content-Type: image/png");
$text = "汉语/漢語"; //My PHP is already saved as UTF-8 in text editor - no conversion necessary
$im = imagecreatetruecolor(25, 350);
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($im, $black);
$textcolor = imagecolorallocate($im, 73, 100, 23);
//270 is the angle, from up-to-bottom
imageTtfText( $im, 12, 270, 10, 10, $textcolor, "./arial_unicode.ttf", $text );
//12 is font size
//Camel-cased because imagettftext just looks horrible and php is case-insensitive
imagepng($im);
imagedestroy($im);
以下是上述代码生成的图像: