加泰罗尼亚字符à和è不适用于php imagestringup - 如何解码它们?

时间:2013-04-18 09:36:52

标签: php unicode utf8-decode unicode-escapes

当我使用带有西班牙语的$ 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>';
    ?>

1 个答案:

答案 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);

以下是上述代码生成的图像:

http://i.imgur.com/pUxibBf.png