Correggere i caratteri dei moduli PHP con UTF-8 e mbstring
Data di pubblicazione:
Aggiornato:
Articoli > Correggere i caratteri dei moduli PHP con UTF-8 e mbstring
2026 stato e uso sicuro
Conclusione: Mantenere una codifica esplicita, normalmente UTF-8, attraverso il modulo HTML, la risposta HTTP, la sorgente PHP, la gestione delle stringhe e la connessione del database. Catturare l'ingresso grezzo e identificare il confine dove i byte vengono decodificati in modo errato prima di cambiare le impostazioni globali.
Cosa imparerai
- Come distinguere un problema di visualizzazione dalla conversione di input o dalla corruzione del database.
- Quali intestazioni e impostazioni PHP sono rilevanti per le moderne applicazioni UTF-8.
- Perché l'eredità
mbstring.internal_encodingembstring.http_inputricetta qui sotto non deve essere copiata a una distribuzione corrente.
Destinatari: I manutentori PHP risoluzione dei problemi mojibake dopo la validazione del modulo, reindirizzamenti, o viaggi rotondi del database.
Nota di aggiornamento (2026): PHP ha deprecato le vecchie direttive di codifica iconv/mbstring in PHP 5.6 a favore di default_charset; codice moderno dovrebbe rendere la codifica esplicita ad ogni confine. La configurazione originale viene mantenuta solo per spiegare l'incidente storico.
Nota di sicurezza: i comandi e gli esempi di configurazione dell'articolo originale non sono stati rieseguiti in un ambiente di produzione moderno. Prima di applicarli, verifica versioni supportate, backup, controlli di accesso e procedura di rollback in un ambiente di prova isolato.
Fonti primarie ufficiali
Panoramica
Si verificava un testo confuso quando si passava dalla schermata di immissione alla schermata di conferma in PHP.
Il testo è confuso quando si inserisce il testo nel modulo e si passa alla schermata di conferma.
Il testo confuso si verifica anche quando si passa alla schermata personale a causa di errori di controllo dell'input.
Dato che il server era appena stato costruito, mi sembrava che mancasse qualcosa nella configurazione di PHP, quindi descriverò ciò che ho scoperto in quel momento.
Indice dei contenuti
1. indagine (per determinare la causa di qualcosa)
Per individuare la causa del problema, sono state analizzate le seguenti informazioni.
1-1. sondaggio
Per prima cosa, controllare le impostazioni di PHP (php.ini).
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
È come descritto sopra e sembra essere a posto.
Allora il problema sembra essere causato dalla sorgente PHP.
Tuttavia, la fonte PHP non ha identificato il probabile problema.
Ancora una volta, ho controllato il php.ini alla ricerca di impostazioni sospette e ne ho trovata una.
mbstring.http_input = auto
Non era chiaro se fosse codificato in UTF-8 perché era impostato su auto, quindi è stato modificato come segue per provarlo.
mbstring.http_input = UTF-8
Risoluzione riuscita del testo confuso.
Questa impostazione è necessaria per il modulo mbstring quando si utilizzano stringhe multibyte, come il giapponese, in PHP.
Configurazione della codifica delle richieste http ricevute.
2. sintesi
Se si verifica un testo confuso, cercare innanzitutto di organizzare il flusso di elaborazione.
Se si verificano caratteri confusi quando si usa PHP per passare dalla schermata di immissione alla schermata di conferma o ad altre transizioni della schermata, sospettare le seguenti impostazioni in php.ini.
L'impostazione predefinita è "auto", quindi verificatela quando utilizzate mbstring per elaborare stringhe multibyte.