Remedierea intrării de formular corupte în PHP: UTF-8 și mbstring


Data publicării:

Actualizat:


Articole tehnice > Remedierea intrării de formular corupte în PHP: UTF-8 și mbstring

Contextul din 2026 și utilizarea în siguranță

Concluzie: păstrați o codificare explicită – de obicei UTF-8 – în formularul HTML, răspunsul HTTP, sursa PHP, gestionarea șirurilor și conexiunea la baza de date. Capturați intrarea brută și identificați limita în care octeții sunt decodați incorect înainte de a modifica setările globale.

Ce vei învăța

  • Cum să distingeți o problemă de afișare de conversia intrărilor sau coruperea bazei de date.
  • Ce anteturi și setări PHP sunt relevante pentru aplicațiile UTF-8 moderne.
  • De ce vechile rețete mbstring.internal_encoding și mbstring.http_input de mai jos nu ar trebui copiate într-o implementare curentă.

Cui se adresează: întreținerii PHP care depanează Mojibake după validarea formularelor, redirecționări sau călătorii dus-întors în baza de date.

Contextul din 2026: PHP a renunțat la vechile directive de codare iconv/mbstring din PHP 5.6 în favoarea default_charset; codul modern ar trebui să facă codificarea explicită la fiecare graniță. Configurația originală este păstrată doar pentru a explica incidentul istoric.

Notă de siguranță: comenzile și exemplele de configurare din articolul original nu au fost reluate într-un mediu de producție actual. Verificați versiunile acceptate, copiile de rezervă, controalele de acces și pașii de retragere într-un mediu de testare separat înainte de a le aplica.

Surse oficiale principale

Prezentare generală

La trecerea de la ecranul de introducere a datelor la ecranul de confirmare în PHP se producea un text confuz.

Textul este confuz atunci când introduceți text în formular și treceți la ecranul de confirmare.

De asemenea, la trecerea la ecranul propriu apare text deformat din cauza unor erori de verificare a intrărilor.

Deoarece serverul tocmai fusese construit, am simțit că lipsește ceva din configurația PHP, așa că voi descrie ceea ce am descoperit la acel moment.


Cuprins

  1. investigație (pentru a determina cauza a ceva)
  2. rezumat

1. investigație (pentru a determina cauza a ceva)

Următoarele informații au fost cercetate pentru a investiga cauza problemei.

1-1. sondaj

În primul rând, verificați setările PHP (php.ini).

php.ini


default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On

Este conform descrierii de mai sus și pare a fi în regulă.

În acest caz, problema pare să fie cauzată de sursa PHP.

Cu toate acestea, sursa PHP nu a identificat problema probabilă.

Încă o dată, am verificat php.ini pentru setări suspecte și am găsit o setare suspectă.

php.ini


mbstring.http_input = auto

Nu era clar dacă era codificat în UTF-8, deoarece era setat la auto, așa că a fost modificat după cum urmează pentru a încerca.

php.ini


mbstring.http_input = UTF-8

Ați rezolvat cu succes textul confuz.

Această setare este necesară pentru modulul mbstring atunci când se utilizează șiruri de caractere cu mai mulți octeți, cum ar fi japoneza în PHP.

Configurarea codificării cererilor http primite.

2. rezumat

Dacă apare un text confuz, încercați mai întâi să organizați fluxul de procesare.

Iar dacă vă confruntați cu caractere confuze atunci când utilizați PHP pentru a trece de la ecranul de introducere la ecranul de confirmare sau la alte tranziții de ecran, suspectați următoarele setări din php.ini.

Setarea implicită este "auto", deci verificați acest lucru atunci când utilizați mbstring pentru a procesa șiruri de caractere multibyte.

Sperăm că explicația a fost utilă.