• User

    UTF-8, usare i caratteri speciali senza ricorrere ai codici ISO

    Salve a tutti,
    sto facendo manutenzione su un sito web "mezzo dinamico e mezzo statico", fatto da due persone diverse:
    Il problema sorge nel tradurre il sito web in lingua tedesca..
    Praticamente ho alcuni alcuni nomi e frasi in tedesco (inseriti nel db) che hanno i caratteri speciali (es. Ö - Ö)...
    Questi nomi vengono pescati dalla parte dinamica e visualizzati correttamente, mentre gli stessi vengono pescati e visti male dalla parte statica, facendo comparire il classico punto di domanda.
    Essendo stati fatti da due persone diverse, ho pensato che mancasse la dichiarazione dell'UTF nella parte statica, tuttavia nell'header delle pagine in questione c'è il meta:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    Ammetto di cadere veramente su un argomento base, ma vabbè, non si finisce mai di imparare in questo mestiere no? 😄


  • User Attivo

    Non sei affatto caduto su un argomento base. Anche se sono in tanti a crederlo, non basta assegnare ad una tabella la collation utf8_general_ci per dire che si è implementato un ottimo sistema di gestione dati di nazionalità/tipologie diversi. Cerca di farci capire bene la differenza tra parte dinamica e parte statica. Il "client" MySQL (in questo caso l'estensione mysql_* di PHP, credo) ha anch'egli una codifica di default.
    Assicurati che:

    • il database MySQL che contiene i dati abbia codifica UTF-8;
    • la tabella MySQL che contiene i dati abbia codifica UTF-8;
    • il campo nella tabella che contiene i dati testuali abbia codifica UTF-8;
    • in my.cnf (file di configurazione di MySQL), i campi character-set-server, default-character-set, default-collation, character-set-client siano settati ad UTF-8;
    • nel tuo .htaccess tu abbia l'istruzione AddDefaultCharset UTF-8;
    • che nel php.ini il campo default_charset sia settato ad UTF-8 e non sia commentato;
    • che il PHP risponda correttamente con un header Content-type con l'istruzione header('content-type: text/html; charset: utf-8');

    eventualmente quando fai stampare il testo al php, fallo passare per la funzione utf8_encode() se non sei sicuro che in alcune parti/sorgenti i dati non sia in quella codifica.