我有一个运行在Windows上的网站,它使用cp1252 (又名Win-1252),这样它就可以显示西班牙字符。这个应用程序用JpGraph 2.3生成了一些情节。这些绘图使用字体系列来显示文本标签。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中从PHP5.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内部错误。我敢说我撞到了虫子..。
发布于 2010-04-29 14:47:58
我的调查结果摘要:
实体对非ASCII字符进行编码。
https://stackoverflow.com/questions/2666105
复制相似问题