Visualizzazione risultati 1 fino 4 di 4

Discussione: [php][mysql] Charset UTF-8, problemi.

  1. #1
    Guest

    Predefinito [php][mysql] Charset UTF-8, problemi.

    Salve!

    Sto facendo delle prove con Mysql e PHP.
    Ho una tabella, con codifica utf8_general_ci con un solo campo varchar ( è una tabella di prova ).

    Con PHPMyAdmin ho inserito alcuni record di prova con lettere accentate ( òòò, àà etc. ), con php estraggo i dati e imposto anche la codifica della pagina a UTF-8.
    Il problema è che lettere accentate non vengono lette corrattemente ( problemi di codifica suppongo... � ).

    Allora dopo aver effettuato la connessione al database, faccio la query SET NAMES utf8 e magicamente funziona.
    Oppure senza query aggiuntive, uso utf8_encode di php.

    Non c'è un modo per evitare questi passaggi?
    Perchè non è sufficente impostare le codifiche correttamente?
    Perchè devo eseguire questa query di troppo?

    È possibile che non ci sia un modo per farlo fare automaticamente a Mysql?
    Ultima modifica di cbg : 19-01-2011 alle ore 15.07.41 Motivo: rimossi i link

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Quello che hai inserito nella tabella, era effettivamente utf-8? Se ci hai messo dentro iso-8859-1, qualunque sia la la codifica della tabella, vengono salvati i dati che gli hai passato, senza convertirli.

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Quello che hai inserito nella tabella, era effettivamente utf-8? Se ci hai messo dentro iso-8859-1, qualunque sia la la codifica della tabella, vengono salvati i dati che gli hai passato, senza convertirli.
    I dati li avevo inseriti da phpMyAdmin, sperando che li avesse inseriti in UTF-8 ma non è stato così.
    Ho creato un'altro script in php, ho inserito i dati in UTF-8 ( staticamente ) e funziona.

    Avrei un'altra domanda, come posso assicurarmi che i dati provenienti da $_POST siano codificati in UTF-8? Devo obbligatoriamente usare utf8_encode oppure esiste un modo per farlo automaticamente?

    P.S. Mi è bastato impostare la codifica a UTF-8 nella pagina in cui si trova il form. Grazie per il supporto ;)
    Ultima modifica di cbg : 18-01-2011 alle ore 20.47.30

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    (letto sopra, riassuntone qua se serve ad altri)

    Esatto, la pagina in cui vengono inseriti i dati deve essere UTF-8. Così i dati inviati al server saranno UTF-8, e finiranno nel database in quel modo (attraverso probabilmente un sano escape), qualunque sia la codifica delle tabelle.

    Quando li tiri fuori, non devi più convertirli (solitamente a meno di htmlspecialchars), ma devi assicurarti che la pagina che li mostra venga renderizzata come UTF-8. Puoi fare questo via <meta> tag nella pagina stessa
    Codice HTML:
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
    oppure via php (prima di ogni altro output) con la funzione header(), così:
    Codice PHP:
    header('Content-Type: text/html; charset=utf-8');
    La funzione header() è anche l'unico modo con cui puoi scegliere il charset se scrivi script php che risponda a chiamate javascript (xmlhttprequest, etc).
    Ultima modifica di dreadnaut : 18-01-2011 alle ore 21.06.23

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •