1

Windowsで実行され、スペイン語の文字を表示できるようにcp1252(aka )を使用するWebサイトがあります。Win-1252アプリはJpGraph2.3でいくつかのプロットを生成します。これらのプロットは、TahomaOpenTypeフォントファミリを使用してテキストラベルを表示します。文字列はANSI(つまり、cp1252)で提供され、フォントファイルはcp1252をサポートします(実際には、*。ttfファイルはシステムのフォントフォルダーからコピーされました)。

PHP/5.2.6からPHP/5.3.0までのいくつかのセットアップで正常に動作しています。PHP / 5.3.1でアプリを実行すると、問題が発生しました。ASCII以外のすべての文字が、欠落している文字または不明な文字を表す中空の長方形に置き換えられています。

JpGraphのドキュメントは、国際文字をどのように期待するかについてはあまり正確ではありません。どうやら、テキストはUTF-8を期待するimagettftext()関数によって内部的に処理されます。ただし、すべてをUTF-8としてエンコードすると、すべてのシステムでアプリが破損します。ANSIが正常に機能していたところ、間違った文字が表示されます(Úの代わりにÊ)。文字が見つからない場合、PHPエラーが発生します。

警告:imagettftext():any2eucjp():何かが起こります

非ASCII文字のレンダリングに影響を与える可能性のある、GD2でPHP / 5.3.0から5.3.1に変更されたものについて何か手がかりはありますか?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内部エラーをトリガーします。あえてバグを見つけたと思います...

4

1 に答える 1

0

私の調査結果の要約:

  1. これはおそらくPHP/5.3.1(または私のPHP / 5.3.1バイナリビルド)のバグです。PHP / 5.3.2は、charsを見逃したり、警告をスローしたりしなくなりました。
  2. 回避策は、数値のHTMLエンティティを使用して非ASCII文字をエンコードすることです。
于 2010-04-29T14:47:58.857 に答える