Set di caratteri guai
-
22-07-2019 - |
Domanda
Ho una piccola applicazione Ajax costruita con PHP.
Usando phpMyAdmin ho impostato un database mysql su utf-8 e vi ho importato un file di testo contenente i dati utf-8.
Funzionava perfettamente su una macchina Windows con easyphp, dopo aver aggiunto character-set-server = utf8 e default-character-set = utf8 al file my.cnf.
Ora ho provato a spostarlo su un server di produzione in cui non ho accesso al file di configurazione, e caratteri come umlaut non vengono visualizzati.
C'è qualcosa che può essere impostato nel codice php (non nel file di configurazione) per risolvere questo problema, o qualche comando che posso dare a mysql?
Ho provato ALTER DATABASE vweb_50
SET DI CARATTERI PREDEFINITO utf8 COLLATE utf8_bin con phpMyAdmin per provare da utf8_general_ci ma non ha fatto differenza.
Soluzione
Ci sono un paio di cose da fare qui, e non sono sicuro di aver capito correttamente il tuo problema, ma se lo faccio, penso che la maggior parte possa essere risolta con le funzioni PHP utf8_encode e utf8_decode :
- utf8_encode
- Codifica una stringa ISO-8859-1 in UTF-8
- utf8_decode
- Questa funzione decodifica i dati, considerati codificati UTF-8, in ISO-8859-1.
Inoltre, guarda htmlentities se necessario.
Altri suggerimenti
Se usi utf-8 in tutta l'applicazione (che consiglierei), non hai bisogno delle funzioni utf8_encode / decode. Hai controllato in quale codifica viene pubblicata la tua pagina? Probabilmente il server è configurato per inviare iso-8859-1 come set di caratteri, mentre l'ambiente di test invia utf-8. Imposta la codifica con un'intestazione Content-Type:
header("Content-Type: text/html; charset=utf-8");