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_encoding ja mbstring.http_input praegusesse 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)
  2. Kokkuvõte

1. uurimine (millegi põhjuse kindlakstegemine)

Probleemi põhjuse uurimiseks uuriti järgmist teavet.

1-1. uuring

Kõigepealt kontrollige PHP seadeid (php.ini).

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.

php.ini


mbstring.http_input = auto

Oli ebaselge, kas see oli kodeeritud UTF-8-ga, sest see oli seatud automaatseks, seega muudeti seda proovimiseks järgmiselt.

php.ini


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.