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 ...

È stato utile?

Soluzione

Una sintesi delle mie scoperte:

  1. 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.
  2. Una soluzione è quella di codificare i caratteri non-ASCII con entità HTML numerici.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top