Segatud vormi sisendi parandamine PHP-s: UTF-8 ja mbstring
Avaldatud:
Uuendatud:
Artiklid › Segatud vormi sisendi parandamine PHP-s: UTF-8 ja mbstring
Olukord 2026. aastal ja ohutu kasutamine
Järeldus: säilitage HTML-vormis, HTTP vastuses, PHP allikas, stringide käsitlemises ja andmebaasiühenduses üks selge kodeering – tavaliselt UTF-8. Enne globaalsete seadete muutmist jäädvustage töötlemata sisend ja tuvastage piir, kus baidid dekodeeritakse valesti.
Mida õpid
- Kuidas eristada kuvamisprobleemi sisendi teisendamisest või andmebaasi kahjustamisest.
- Millised päised ja PHP-sätted on tänapäevaste UTF-8 rakenduste jaoks asjakohased.
- Miks ei tohiks allolevaid pärandretsepte
mbstring.internal_encodingjambstring.http_inputpraegusesse juurutusse kopeerida.
Kellele see mõeldud on: PHP hooldajad tegelevad mojibake'i tõrkeotsinguga pärast vormi kinnitamist, ümbersuunamisi või andmebaasi edasi-tagasi reise.
2026. aasta seisukoht: PHP kaotas versioonis PHP 5.6 vanad iconv/mbstring kodeeringu direktiivid, eelistades default_charset; kaasaegne kood peaks muutma kodeeringu igal piiril selgesõnaliseks. Algne konfiguratsioon säilitatakse ainult ajaloolise juhtumi selgitamiseks.
Ohutusmärkus: Algse artikli käske ja seadistusnäiteid ei ole tänapäevases tootmiskeskkonnas uuesti käivitatud. Enne rakendamist kontrolli toetatud versioone, tee varukoopia ja valmista eraldi testkeskkonnas ette tagasipööramise plaan.
Ametlikud allikad
Ülevaade
PHP-siseselt sisestusekraanilt kinnitusekraanile üleminekul tekkis moonutatud tekst.
Tekst on segane, kui sisestate teksti vormi ja liigute kinnitusekraanile.
Ebaõige tekst tekib ka oma ekraanile üleminekul sisendkontrolli vigade tõttu.
Kuna server oli äsja ehitatud, tundsin, et PHP-konfiguratsioonis on midagi puudu, nii et kirjeldan, mida ma tol ajal avastasin.
Sisukord
1. uurimine (millegi põhjuse kindlakstegemine)
Probleemi põhjuse uurimiseks uuriti järgmist teavet.
1-1. uuring
Kõigepealt kontrollige PHP seadeid (php.ini).
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
See on nagu eespool kirjeldatud ja tundub olevat korras.
Siis tundub, et probleemi põhjuseks on PHP-allikas.
PHP allikas ei tuvastanud siiski tõenäolist probleemi.
Veelkord kontrollisin php.ini'd kahtlaste seadete suhtes ja leidsin ühe kahtlase seadistuse.
mbstring.http_input = auto
Oli ebaselge, kas see oli kodeeritud UTF-8-ga, sest see oli seatud automaatseks, seega muudeti seda proovimiseks järgmiselt.
mbstring.http_input = UTF-8
Edukalt lahendatud moonutatud tekst.
See seadistus on vajalik mbstringi mooduli jaoks, kui PHP-s kasutatakse mitmetahulisi stringisid, näiteks jaapani keelt.
Vastuvõetud http-päringute kodeerimise konfigureerimine.
2. kokkuvõte
Kui tekst on segane, proovige kõigepealt korraldada töötlemisvool.
Ja kui teil tekivad moonutatud tähemärgid, kui te kasutate PHP-d sisestusekraanilt kinnitusekraanile üleminekuks või muudeks ekraani üleminekuteks, siis kahtlustage järgmisi seadistusi php.ini failis.
Vaikimisi seade on 'auto', seega kontrollige seda, kui kasutate mbstringi mitmebaidiliste stringide töötlemiseks.
Need on peamised sammud ja piirangud, mida tuleb arvestada.
■Artiklid
■Profiil
■Kontakt