我有一个在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用来做工精细,我得到错误的字符( 电子 ,而不是U) 在那里我得到丢失字符,现在我得到一个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
内部错误。 我敢说我已经打了一个错误...