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_encoding e mbstring.http_input ricetta 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)
  2. sintesi

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).

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.

php.ini


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.

php.ini


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.

■INFORMATION

Articoli


■PROFILE

Profilo


■Contatti

Contatti