缺少JpGraph中的字符

时间:2010-04-19 08:30:03

标签: php gd true-type-fonts imagettftext jpgraph

我有一个在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内部错误。我敢说我遇到了一个错误......

1 个答案:

答案 0 :(得分:0)

我的发现摘要:

  1. 这可能是PHP / 5.3.1(或我的PHP / 5.3.1二进制版本)中的错误; PHP / 5.3.2不再错过字符或抛出警告。
  2. 解决方法是使用数字HTML实体对非ASCII字符进行编码。