我有一个在Windows上运行并使用cp1252
(又名Win-1252
)的网站,因此它可以显示西班牙语字符。该应用程序使用 JpGraph 2.3 生成一些图表。这些图使用Tahoma Open Type字体系列来显示文本标签。字符串以ANSI(即cp1252)提供,字体文件支持cp1252(实际上,* .ttf文件是从系统的字体文件夹中复制的。)
在从PHP / 5.2.6到PHP / 5.3.0的几个设置中,它一直运行良好。当我在 PHP / 5.3.1 下运行应用程序时出现问题:所有非ASCII都被代表缺失或未知字符的空心矩形所取代。
JpGraph的文档对于它如何期待国际字符并不十分准确。显然,文本由imagettftext()函数在内部处理,该函数需要UTF-8。但是,将所有内容编码为UTF-8会破坏所有系统中的应用程序。 ANSI过去工作正常,我得到错误的字符(Ê而不是Ú)。我丢失字符的地方,现在我收到一个PHP错误:
警告:imagettftext():any2eucjp(): 事情发生了
您是否有任何关于GD2从PHP / 5.3.0到5.3.1的变化的线索可能会影响非ASCII字符的渲染?我怎么期望在Win-1252字符集中用字符串提供JpGraph?
最终,该问题与JpGraph无关。我可以通过简单调用imagettftext()来重现这个问题:
<?php
$im = imagecreatetruecolor(400, 30);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
//$text = 'áéíóú ÁÉÍÓÚ'; # ANSI
$text = utf8_encode('áéíóú ÁÉÍÓÚ'); # UTF8
$font = '/path/to/tahomabd.ttf';
imagettftext($im, 15, 0, 10, 25, $black, $font, $text);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
在PHP / 5.3.0中,ANSI和UTF-8都呈现正确的文本。在PHP / 5.3.1中,ANSI呈现错误的字符,UTF-8触发any2eucjp(): something happen
内部错误。我敢说我遇到了一个错误......
答案 0 :(得分:0)
我的发现摘要: