Inviato: 15 Apr 2012 15:59 Oggetto: Problemi lettere accentate [dopo migrazione dati MySQL]
Salve,
ho dovuto trasferire un forum phpBB con relativo database da un server all’altro ma purtroppo il risultato finale è stata la comparsa di caratteri speciali al posto di quelli accentati tipo e’ al posto di è, à al posto di à, ° al posto di ° ecc.
Ho fatto diverse prove per sistemare, partendo dalla correzione manuale dei caratteri e poi reimportazione del database tramite dump, ma poi i caratteri speciali riprendono il posto di quelli accentati, verificato anche riscaricando poi il database. Ho provato quindi anche a cambiare charset del database, dall’attuale UTF-8 al latin, ma il risultato è stato di veder comparire altri caratteri speciali oltre a quelli già esistenti.
Qualcuno ha quindi idea di come si possa fare per ripristinare una volta per tutte i caratteri accentati? Il vecchio database non è più disponibile, quindi devo modificare quello aggiornato.
Grazie mille
Hmm, fare uscire i caratteri giusti è una cosa inutilmente complessa che sconfina nella magia nera
(vado a memoria perchè è un pò che non lavoro in PHP, e faccio riferimento all'interfaccia MySQL originale, se devi lavorare con MiSSQLi probabilmente devi usare un sistema diverso).
Dunque, supponiamo che tu voglia usare il set di caratteri UTF-8.
Intanto devi essere sicuro che tutte le tabelle e le colonne siano definite con l'encoding UTF-8 (si fa con phpmyadmin), e che i dati che ci metti dentro siano effettivamente codificati come UTF-8. Se per ricaricare il database usi degli INSERT in teoria MySQL dovrebbe codificare tutto in UTF-8 (perchè è così che hai definito le colonne). Invece un dump/restore binario lascia i dati come erano nell'altro database.
Il passo successivo è fare eseguire qualcosa tipo mysql_query("SET NAMES utf8", $conn) subito dopo la connessione al database, naturalmente al posto di $conn metti la variabile che hai usato in fase di connessione.
(se hai un PHP relativamente recente invece di mysql_query("SET NAMES utf8", $conn) puoi usare mysql_set_charset('utf8',$conn); , che da una certa versione in poi è la sintassi raccomandata).
Se invece i dati sul database non sono codificati UTF-8 puoi provare con qualcosa tipo "latin1", "ISO-8859-1" o anche "CP1250". L'importante è che sia lo stesso charset che usa il database e in cui i dati sono codificati.
E' anche possibile trovare qualche diritta sul manuale PHP online, specie tra i commenti degli utenti che sono sotto ogni funzione: Link a pagina di Php.net
Django
125 Champ
Ranking: 2069
Pagina 1 di 1
Non puoi inserire nuovi Topic Non puoi rispondere ai Topic Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi