caratteri mancanti in JPGraph
-
27-09-2019 - |
Domanda
Ho un sito web che funziona con Windows e usi cp1252
(aka Win-1252
) in modo che possa visualizzare i caratteri spagnoli. L'applicazione genera alcuni appezzamenti con JPGraph 2.3 . Questi grafici utilizzano la famiglia di font Tahoma tipo aperto per visualizzare le etichette di testo. Le stringhe sono forniti in ANSI (vale a dire, CP1252) e file di font supporto CP1252 (in realtà, i file .ttf * sono stati copiati dalla cartella dei caratteri del sistema).
E 'stato lavorando bene in diverse configurazioni di PHP / 5.2.6 a PHP / 5.3.0. I problemi sono iniziati quando ho fatto funzionare l'applicazione in PHP / 5.3.1 :. Tutti i non-ASCII sono sostituiti dal rettangolo vuoto che rappresenta i caratteri sconosciuti mancante o
la documentazione del JPGraph non è molto preciso su come si aspetta caratteri internazionali. Apparentemente, il testo viene gestito internamente dalla funzione imagettftext (), che prevede UTF-8. Tuttavia, la codifica tutto come UTF-8 si rompe l'applicazione in tutti i sistemi. Dove ANSI usato per il lavoro bene, ottengo caratteri errati ( e al posto di U ). Dove mi sono mancante caratteri, ora ottengo un errore PHP:
Attenzione: imagettftext (): any2eucjp (): E 'successo qualcosa
Avete qualche indizio su cosa è cambiato in GD2 da PHP / 5.3.0 a 5.3.1 che potrebbe essere colpendo il rendering su caratteri non-ASCII? Come sono io aspettavo di nutrire JPGraph con le stringhe nella vittoria-1252 charset?
Aggiorna
In definitiva, il problema non è legato alla JPGraph. Posso riprodurre il problema con una semplice chiamata al 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);
?>
In PHP / 5.3.0, sia ANSI e UTF-8 rendere il testo a destra. In PHP / 5.3.1, ANSI rende caratteri sbagliati e UTF-8 genera l'errore interno any2eucjp(): something happen
. Oserei dire che ho colpito un bug ...
Soluzione
Una sintesi delle mie scoperte:
- E 'probabilmente un bug in PHP / 5.3.1 (o nel mio PHP / 5.3.1 costruire binario); PHP / 5.3.2 Misses caratteri non più o lancia un avvertimento.
- Una soluzione è quella di codificare i caratteri non-ASCII con entità HTML numerici.