Sugadintos formos įvesties taisymas PHP: UTF-8 ir mbstring
Paskelbimo data:
Atnaujinta:
Techniniai straipsniai > Sugadintos formos įvesties taisymas PHP: UTF-8 ir mbstring
2026 m. būsena ir saugus naudojimas
Išvada: HTML formoje, HTTP atsakyme, PHP šaltinyje, eilučių tvarkyme ir duomenų bazės jungtyje laikykite vieną aiškią kodavimą – paprastai UTF-8. Prieš keisdami visuotinius nustatymus, užfiksuokite neapdorotą įvestį ir nustatykite ribą, kurioje baitai dekoduojami neteisingai.
Ką išmoksite
- Kaip atskirti rodymo problemą nuo įvesties konvertavimo ar duomenų bazės sugadinimo.
- Kokios antraštės ir PHP nustatymai yra svarbūs šiuolaikinėms UTF-8 programoms.
- Kodėl toliau pateikti pasenę
mbstring.internal_encodingirmbstring.http_inputreceptai neturėtų būti kopijuojami į dabartinį diegimą.
Kam tai skirta: PHP prižiūrėtojai šalina „mojibake“ triktis po formos patvirtinimo, peradresavimų ar duomenų bazės kelionių pirmyn ir atgal.
2026 m. kontekstas: PHP panaikino senąsias iconv/mbstring kodavimo direktyvas PHP 5.6 versijoje ir pakeitė default_charset; Šiuolaikinis kodas turėtų padaryti kodavimą aiškų kiekvienoje riboje. Pradinė konfigūracija išlaikoma tik siekiant paaiškinti istorinį įvykį.
Saugos pastaba: pradiniame straipsnyje pateiktos komandos ir konfigūracijos pavyzdžiai nebuvo pakartotinai vykdomi dabartinėje gamybos aplinkoje. Prieš taikydami, patikrinkite palaikomas versijas, atsargines kopijas, prieigos valdiklius ir atšaukimo veiksmus atskiroje bandymo aplinkoje.
Pagrindiniai oficialūs šaltiniai
Apžvalga.
Pereinant iš įvesties ekrano į patvirtinimo ekraną PHP programoje atsirasdavo iškraipytas tekstas.
Įvedant tekstą formoje ir pereinant į patvirtinimo ekraną tekstas iškraipomas.
Dėl įvesties tikrinimo klaidų pereinant į nuosavą ekraną taip pat atsiranda iškraipytas tekstas.
Kadangi serveris buvo ką tik sukurtas, pajutau, kad PHP konfigūracijoje kažko trūksta, todėl aprašysiu, ką tuo metu išsiaiškinau.
Turinys
1. tyrimas (siekiant nustatyti ko nors priežastį)
Siekiant išsiaiškinti problemos priežastį, buvo išnagrinėta ši informacija.
1-1. apklausa
Pirmiausia patikrinkite PHP nustatymus (php.ini).
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
Jis yra toks, kaip aprašyta pirmiau, ir atrodo tinkamas.
Atrodo, kad problema kyla dėl PHP šaltinio.
Tačiau PHP šaltinis nenustatė tikėtinos problemos.
Dar kartą patikrinau įtartinų nustatymų php.ini ir radau vieną įtartiną nustatymą.
mbstring.http_input = auto
Nebuvo aišku, ar jis užkoduotas UTF-8 formatu, nes buvo nustatyta automatinė reikšmė, todėl, norint tai išbandyti, jis buvo pakeistas taip.
mbstring.http_input = UTF-8
Sėkmingai išspręstas iškraipyto teksto klausimas.
Šis nustatymas yra būtinas mbstring moduliui, kai PHP programoje naudojamos daugiabajtės eilutės, pvz., japonų kalba.
Gaunamų http užklausų kodavimo konfigūravimas.
2. santrauka
Jei atsiranda teksto iškraipymų, pirmiausia pabandykite organizuoti apdorojimo srautą.
Jei naudojant PHP perėjimui iš įvesties ekrano į patvirtinimo ekraną ar kitokiam perėjimui į kitą ekraną naudojami iškraipyti simboliai, įtarkite šiuos php.ini nustatymus.
Numatytoji nuostata yra "auto", todėl naudodami mbstring daugiabajtėms eilutėms apdoroti ją patikrinkite.
Dėkojame, kad žiūrėjote iki pabaigos.
Techniniai straipsniai
Peržiūrėkite visus techninius straipsnius.
Profilis
Peržiūrėkite autoriaus profilį.
Kontaktai