Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    php jquery e ajax: charset da impazzire!

    Ciao,
    sto sviluppando una applicazione in php e il problema del charset sta diventando inaffrontabile:
    sto usando jquery con ajax per prelevare dei dati immessi da utente (stringhe con potenziali accenti) e salvarle su db Oracle.

    Il charset impostato è ISO-8859-1, però jquery lavora sempre in UTF-8 da quanto ho capito/credo di aver capito/letto da qualche parte.

    Pertanto, lato php, prelevo le stringhe dalla form in jquery (jquery dialog, della UI, user interface), e salvo questi dati su db. Prima di salvarli li converto con:
    if (!mb_check_encoding($variabile,'ISO-8859-1')) $variabile = mb_convert_encoding($variabile, 'ISO-8859-1');

    avevo provato anche convertendo sempre, ovvero:
    $variabile = mb_convert_encoding($variabile, 'ISO-8859-1');

    in entrambe i casi, talvolta i dati su db con accenti vengono visualizzati correttamente, altre volte questi caratteri vengono sostituiti con cose del genere: "èà èìùò", a significare che la conversione al charset non è avvenuta correttamente o non so quale altro sia il problema. Su db quindi i dati vengono salvati male, e non capisco il perchè.
    Al db ho la connessione in charset WE8MSWIN1252.

    C'è qualcosa che sbaglio? Qualcuno di voi ha avuto esperienza diretta con i charset in questo tipo di casistiche?

  2. #2
    ciao, anche io sono impazzito parecchio con la codifica e i charset.
    Hai ragione a dire che jQuery utilizza utf8 per le chiamate ajax e il mio consiglio è di impostare tutto (ma proprio tutto) con questa codifica. Questo significa avere pagine php (e html) con il seguente meta tag:
    codice:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    inoltre utilizza un editor di testo per scrivere il codice con l'encoding impostato su utf8.
    Poi setta utf8 nelle tabelle del tuo db e nella connessione (con MySQL è semplice con Oracle non saprei) e alla fine di tutto, se ancora hai problemi di visualizzazione, utilizza queste due funzioni che mi hanno più di una volta salvato il c... :
    codice:
    utf8_encode(stringa);   // per inviare l'output corretto al browser
    utf8_decode(stringa);   // per scrivere correttamente le stringhe nel DB.
    Questo è il modo corretto per avere una applicazione web che può supportare tutte le lingue e i caratteri speciali anche per una eventuale estensione nel futuro.

    ciao

  3. #3
    hai ragionissimo, e in altri progetti ho fatto proprio ciò che hai detto. Il problema è che quando hai un progetto già avviato in malomodo, non puoi modificare niente perchè comprometteresti il funzionamento di grandi quantità di applicazioni che usano gli stessi dati, codificati con un charset scelto senza pensarci bene.

    Quando sei costretto, c'è poco da fare..purtroppo.

    Ora ho provato a fare una classe php per la conversione, in modo da modificare solo quella. Ho fatto in modo che qualsiasi stringa venga passata per querystring ad ajax (nodo del problema), viene convertita così:

    $this->source_charset = 'UTF-8';
    $this->target_charset = 'ISO-8859-1';

    $stringa = mb_convert_encoding($stringa,$this->target_charset,$this->source_charset);

    Teoricamente il fatto di sapere con sicurezza che con ajax jquery si lavora in UTF-8 è una garanzia per la conversione, nel senso che se converto tutto sono sicuro che il charset sorgente è UTF-8 e quindi la conversione andrà a buon fine. Del resto però a Murphy piacciono davvero tanto i charset hehe..

    speriamo bene!! C'è solo un modo per trovare problemi: test, test, test!!!

    grazie ancora!

  4. #4
    il test ha portato a brutti esiti: talvolta gli input passati per query string tramite ajax vengono inviati come ISO-8859-1, e quindi quando converto da UTF-8 a ISO ottengo un errore, ovvero la sostituzione dei caratteri accentati con stringhe vuote.

    E poi mi chiedo a cosa serva impostare il charset di ajax come illustrato nella guida jquery..nessuno ha navigato questo abisso? C'è così tanta confusione..

  5. #5
    che versioni usi di jquery? Comunque non credo che il problema sia nella libreria jquery; controlla bene le tue pagine php e le impostazioni di encoding del browser...

  6. #6
    jQuery JavaScript Library v1.4.4

    jQuery UI 1.8.9

    ho notato che i charset accettati a livello HTTP sono impostati in questo modo:

    HTTP_ACCEPT_CHARSET: 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'

    accettare sia iso che utf-8 non rende impossibile dedurre a priori quando un char è di tipo iso o utf-8? Ma soprattutto: non lo rende anche impossibile a posteriori?

    Sembra che talvolta i charset siano accettati come ISO e talvolta come utf-8, e sembra essere questo il motivo per cui non funziona..ditemi se sbaglio però!!

  7. #7
    ma passare per query string parametri in una chiamata ajax (jquery) i parametri passati sono sempre utf-8?

    Perchè se così fosse, allora non ha senso che convertire a volte non va bene, i parametri dovrebbero essere sempre utf-8!!

  8. #8

  9. #9
    sicuramente utile..farò qualche test

    Il tema (credo) sia molto interessante perchè costituisce uno scoglio per molti.

    Cito dalla guida ufficiale di jquery
    <<..
    contentType
    Default: 'application/x-www-form-urlencoded'

    When sending data to the server, use this content-type. Default is "application/x-www-form-urlencoded", which is fine for most cases. If you explicitly pass in a content-type to $.ajax() then it'll always be sent to the server (even if no data is sent). Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.
    ..>>

    Ora, questo cosa vuol dire?
    Viene proposto da alcuni di aggiungere l'opzione ad ajax:

    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1"

    Ma la guida non dice che viene sempre e comunque utilizzato UTF-8? Cosa significa allora questa soluzione?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.