Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606

    Da form HTML a PHP perde il charset

    Sto costruendo un'applicazione internazionale che stampa in pdf una distinta di spedizione, ce l'ho persino fatta ma un errore diabolico mi perseguita.
    In pratica da un form con pochi dati da inserire mi viene costruita la paginetta da stampare con l'indirizzo del destinatario e qualche altro dato, il tutto nella lingua del destinatario.
    Gli indirizzi vengono presi da un database MySQL (UTF8) tutti i file sono salvati come UTF8 (senza BOM per i PHP) i file XHTML sono codificati UTF8 ma quando passo il valore dal form al PHP per la generazione del PDF perdo il charset. Non è il PDF lo perdo prima.
    In pratica se scrivo che ne so:
    Tř. Edv. Beneše 1
    Plzeň, 306 17
    Česká republika
    Mi arriva
    T?. Edv. Bene?e 1
    Plze?, 306 17
    ?esk? republika
    cioè tutti i caratteri "strani" diventano punti interrogativi, ma nel database di partenza l'indirizzo è scritto giusto, quello che ho inserito l'ho preso da lì!
    Non so che pesci prendere, l'unica cosa che mi viene in mente è il server Web un Abyss X1 se no non so che altro pensare, qualcuno mi sa dare un dritta?

  2. #2
    Pare un errore di charset classico....mmm usi utf8_encode e utf8_decode per i recuperi e inserimenti?

  3. #3
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    No perché parte già da unicode e torna unicode.
    Anzi, in un campo del form che permette di selezionare una città di destinazione a partire dal nome di una nazione, il campo viene popolato tramite richiesta ajax, prima credendo di fare bene usavo utf8_decode() nel valore di ritorno e li mi sono accorto che sbagliavo, l'ho tolto ed ora la stringa mi viene resa giusta.

  4. #4
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Per capirci ecco il form come si presenta:

    In Nazione estera erogante: (giuro poi lo cambio) si scrive il nome della nazione in italiano, come nell'immagine sotto.

    E il suggeritore ti da una serie di indirizzi così come vengono presi dal database, vedi che i caratteri dell'alfabeto (dovrebbe essere Latin A) Ceco ci sono.
    E infatti così vengono riportati nel box una volta fatta la scelta:

    Ma se poi premo [STAMPA DISTINTE] o [STAMPA BUSTE] i caratteri vengono riportati come ho scritto prima.

  5. #5
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Risolto, in pratica il problema era dovuto all'impostazione di codifica.
    Mi spiego meglio, sul server per la conversione in PDF sono compilate insieme al PHP le Haru, queste non essendo unicode, ma implementando solo alcune tabelle caratteri hanno bisogno di conoscere a priori il charset.
    Una rogna perché sono pochissimo e malissimo documentate, in pratica c'è un buon esempio d'uso su Zend e il manuale di PHP ma senza nessun esempio, quindi si va per tentativi.
    Inoltre bisogna stare attenti pure al font usato perché non tutti hanno l'intero unicode al loro interno, per esempio il DejaVu.
    DejaVu è un bastardo perché esiste in tre modalità, serif, sans e condensed.
    Il primo è comodo se devi stampare su carta man on ha tutto l'insieme dei caratteri, mentre l'unico che li ha è sans, che però su carta rende male. Gioco forza però usarlo anche se pesa vari mega, ma è normale c'è quasi tutto l'unicode dentro
    Inoltre bisogna anche controllare la codifica dei caratteri riga per irga e non solo una volta nel testo, dato che l'intestazione è in italiano, il resto in vattela a pesca e se c'è un nome di persona non è detto che non sia il nome di un giapponese
    Insomma Italiano = ISO8859-2 (Già l'ISO8859-1 non c'è) poi magari andiamo nella Federazione Russa, quindi ISO8859-5 e infine si torna in ISO8859-2 per la firma che è in italiano.
    Una bella palla.
    Per fortuna un'amico ha scritto una routine che si basa sulla verifica dell'errore di iconv() sulla stringa passata per scoprire qual'è la codifica da usarsi, ma questa routine va usata ogni volta che si scrive una stringa e ogni volta bisogna usare la getFont() per dirgli quale carattere e quale codifica usarsi.
    Meglio sarebbe stato usare la pdflib ma è a pagamento per l'unicode mentre le Haru no, mannaggia i giapponesi!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.