Popravljanje pokvarjenega vnosa obrazca v PHP: UTF-8 in mbstring


Datum objave:

Osveženo:


Tehnični članki > Popravljanje pokvarjenega vnosa obrazca v PHP: UTF-8 in mbstring

Status in varna uporaba 2026

Sklep: Obdržite eno eksplicitno kodiranje – običajno UTF-8 – po HTML obliki, HTTP odgovor, PHP vir, ravnanje z nizom, in podatkovno povezavo. Zajemite neobdelan vnos in označite mejo, kjer so bajti napačno dekodirani pred spreminjanjem globalnih nastavitev.

Kaj se boš naučil?

  • Kako razlikovati problem prikaza od pretvorbe vhoda ali korupcijo baze podatkov.
  • Katere glave in PHP nastavitve so pomembne za sodobne aplikacije UTF-8.
  • Zakaj zapuščina? mbstring.internal_encoding ter mbstring.http_input Spodnji recept se ne sme kopirati v trenutno uporabo.

Za koga je to? PHP vzdrževalci odpravljanje težav mojibake po potrditvi oblike, preusmeri, ali baze podatkov krožnih potovanj.

Kontekst za leto 2026: PHP deprecira stare ikonv/mbstring kodiranje direktiv v PHP 5.6 v korist default_charset; Sodobna koda mora biti kodiranje jasno na vsaki meji. Prvotna konfiguracija se ohrani samo za razlago zgodovinskega incidenta.

Varnostna opomba: Ukazi in konfiguracijski primeri v prvotnem članku niso bili ponovno predvajani v trenutnem proizvodnem okolju. Pred uporabo preveri podprte različice, varnostne kopije, nadzor dostopa in povratne korake v ločenem preskusnem okolju.

Glavni uradni viri

Pregled.

Pri prehodu z vnosnega zaslona na potrditveni zaslon v jeziku PHP se je pojavilo črkovano besedilo.

Pri vnosu besedila v obrazec in prehodu na potrditveni zaslon je besedilo izkrivljeno.

Zaradi napak pri preverjanju vnosa se pri prehodu na lastni zaslon pojavi tudi zamegljeno besedilo.

Ker je bil strežnik pravkar zgrajen, se mi je zdelo, da v konfiguraciji PHP nekaj manjka, zato bom opisal, kaj sem takrat ugotovil.


Kazalo vsebine

  1. preiskava (ugotavljanje vzroka nečesa)
  2. povzetek

1. preiskava (ugotavljanje vzroka nečesa)

Pri iskanju vzroka težave so bile preverjene naslednje informacije.

1-1. raziskava

Najprej preverite nastavitve PHP (php.ini).

php.ini


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

Je tako, kot je opisano zgoraj, in se zdi, da je v redu.

Potem se zdi, da težavo povzroča vir PHP.

Vendar vir PHP ni opredelil verjetne težave.

Še enkrat sem preveril php.ini za sumljive nastavitve in našel eno sumljivo nastavitev.

php.ini


mbstring.http_input = auto

Ker ni bilo jasno, ali je kodiran v UTF-8, saj je bila nastavljena samodejna nastavitev, je bil spremenjen na naslednji način, da bi ga preizkusili.

php.ini


mbstring.http_input = UTF-8

Uspešno rešeno izkrivljeno besedilo.

Ta nastavitev je potrebna za modul mbstring pri uporabi večbajtnih nizov, kot je japonščina v PHP.

Konfiguracija kodiranja prejetih zahtevkov http.

2. povzetek

Če se pojavi izkrivljeno besedilo, najprej poskusite organizirati potek obdelave.

Če pri prehodu iz vnosnega zaslona v potrditveni zaslon ali pri drugih prehodih med zasloni s PHP-jem prihaja do popačenih znakov, preverite naslednje nastavitve v php.ini.

Privzeta nastavitev je 'auto', zato jo preverite, ko uporabljate mbstring za obdelavo večbajtnih nizov.

Upamo, da je bila razlaga koristna.