Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376

    Caratteri accentati e database

    DATABASE
    Set di caratteri MySQL: UTF-8 Unicode
    Collazione della connessione di MySQL: utf8_unicode_ci
    Campi tabella: utf8_general_ci

    PAGINE WEB
    Form inserimento dati: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Pagina visualizzazione dati: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    Problema: quando inserisco dei dati nel db, le accentate à è ì ò ù (e credo anche altri caratteri) vengono immagazzinati in tabella in maniera strana (lo vedo con phpmyadmin).
    Quando richiamo la pagina che estrai quei dati, li vedo correttamente.

    Come posso fare per avere utf8 in lettura e inserimento e visualizzare correttamente i dati?
    Aiuto: non ci sto capendo più nulla.

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    è phpmyadmin a sbagliare se l'inserimento lo fai da form e poi li vedi correttamente non preoccupartene.

    L'importante è che non editi il contenuto del db con phpmyadmin.




  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    però quando esporto il dump (sia da phpmadmin che da script in pagina web) prende quei caratteri non validi

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    da phpmyadmin non mi meraviglia, da script.. dipende, come avviene questa esportazione?

    La pagina php contiene questa riga?

    codice:
    header('Content-type: text/html;charset=utf-8');

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    l'ho messa: il dump lo esporta bene. Però se voglio usare phpmyadmin il problema si ripropone.

    Se invece, setto l'header a ISO-8859-1 va tutto bene... Quale dei due charset dovrei usare?

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    senza ombra di dubbio utf8.

    Per quanto riguarda il problema di gestione dei dati di phpmyadmin me ne sono sempre fregato, comunque ho cercato velocemente su google e ho trovato questo e sembra funzionare:

    http://dev.expocom.nl/functions.php?id=132&q=

    ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    scusami, abbi pazienza ma non ho capito.

    Parto proprio dall'inizio.

    So che esiste la codifica UTF-8 che permette, al browser, di interpretare i caratteri particolari, internazionali, accentati ecc. correttamente.

    D'accordo, mi sta bene: è da preferire alla ISO-8859-1 che, magari, funziona bene solo con le lettere occidentali. Dovendo vendere o distribuire gratuitamente un applicazione PHP ad utenti internazionali, scelgo utf8.

    Fin qui, ok. Prendo i miei script (nulla di che, applicazioni amatoriali o poco più) e metto in cima ai file la stringa:
    Codice PHP:
    header('Content-type: text/html;charset=UTF-8'); 
    meglio del meta tag in html.
    Così facendo, dico (forzo il) al browser di interpretare i dati con quella codifica.

    Metto quell'header nella pagina da dove inserisco i dati nel db (mysql ultima versione, tutto in UTF-8) e nella pagina che visualizzerà quegli stessi dati.
    Nella pagina che visualizza i dati, tutto ok: però, dal momento che i dati in tabella (arrivati in utf8) sono tutti strani (es.: à è ì ò ù ) ho problemi nell'esportazione degli stessi.
    Sia via script (rettifico quanto scritto nel mio post precedente) che da phpmyadmin.
    Infatti, i dati vengono presi proprio dalla tabella così come sono.

    Il problema vero è che non posso dire agli utenti di andare a modificare (o, peggio ancora, di farlo fare al proprio hosting) dei file di phpmyadmin (cioè, un'applicazione di terze parti) altrimenti non potrete fare il backup.

    Quindi, da questo punto di vista, utf8 risulta meno conveniente di iso-8859-1.
    Utilizzando, quest'ultimo, non si presentano questi problemi.

    Ti trovi? o sto sbagliando tutto?

  8. #8
    setta il charset delle tabelle a utf-8, aggiungi
    Codice PHP:
    AddDefaultCharset utf-8
    php_value default_charset utf
    -
    all'.htaccess e usa il più possibile htmlentities, qui trovi una funzione senza problemi di encoding tipici di htmlentities:
    http://forum.html.it/forum/showthrea...0#post11904210

    se vuoi permettere l'html basta che modifichi la funzione così:
    Codice PHP:
    function utf8_htmlentities($str){ 
        return 
    call_user_func_array('mb_convert_encoding',$str,'HTML-ENTITIES','UTF-8')); 

    Edit: maledetto IE8 che invia i post anche quando premi invio in una textarea

    Per il resto gianiaz ti ha già spiegato tutto.

  9. #9
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da LucianoS
    scusami, abbi pazienza ma non ho capito.

    Parto proprio dall'inizio.

    So che esiste la codifica UTF-8 che permette, al browser, di interpretare i caratteri particolari, internazionali, accentati ecc. correttamente.

    D'accordo, mi sta bene: è da preferire alla ISO-8859-1 che, magari, funziona bene solo con le lettere occidentali. Dovendo vendere o distribuire gratuitamente un applicazione PHP ad utenti internazionali, scelgo utf8.

    Fin qui, ok. Prendo i miei script (nulla di che, applicazioni amatoriali o poco più) e metto in cima ai file la stringa:
    Codice PHP:
    header('Content-type: text/html;charset=UTF-8'); 
    meglio del meta tag in html.
    Così facendo, dico (forzo il) al browser di interpretare i dati con quella codifica.

    Metto quell'header nella pagina da dove inserisco i dati nel db (mysql ultima versione, tutto in UTF-8) e nella pagina che visualizzerà quegli stessi dati.
    Nella pagina che visualizza i dati, tutto ok: però, dal momento che i dati in tabella (arrivati in utf8) sono tutti strani (es.: à è ì ò ù ) ho problemi nell'esportazione degli stessi.
    Sia via script (rettifico quanto scritto nel mio post precedente) che da phpmyadmin.
    Infatti, i dati vengono presi proprio dalla tabella così come sono.

    Il problema vero è che non posso dire agli utenti di andare a modificare (o, peggio ancora, di farlo fare al proprio hosting) dei file di phpmyadmin (cioè, un'applicazione di terze parti) altrimenti non potrete fare il backup.

    Quindi, da questo punto di vista, utf8 risulta meno conveniente di iso-8859-1.
    Utilizzando, quest'ultimo, non si presentano questi problemi.

    Ti trovi? o sto sbagliando tutto?
    Il punto sbagliato di tutto è che vuoi permettere l'utilizzo di phpmyadmin al tuo cliente.

    Per quanto riguarda l'esportazione da script non posso dirti quale errore c'è, ma sicuramente ce n'è uno.

    Non mi stancherò mai di ripeterlo, non fidatevi di quello che vi mostra phpmyadmin, ci sono di mezzo diversi livelli in cui il charset può essere rovinato, l'importante è che se tu hai un form con l'header a utf8 e fai l'inserimento, nelle pagine che hanno utf8 vedrai i caratteri corretti.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    Originariamente inviato da The Captain
    Codice PHP:
    function utf8_htmlentities($str){
    return 
    call_user_func_array('mb_convert_encoding', array(htmlspecialchars($str,ENT_QUOTES),'HTML-ENTITIES','UTF-8'));

    non riesco a comprendere bene questa funzione: converte i dati in utf8 lasciando le entità html o fa altro?


    Inoltre ho dei file che cominciano così:
    codice:
    <?php
    session_start();
    include
    require
    define
    dove dovrei inserire header('Content-type: text/html;charset=UTF-8'); ?

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.