Bojātas formas ievades labošana PHP: UTF-8 un mbstring
Publikācijas datums:
Atjaunināts:
Tehniskie raksti > Bojātas formas ievades labošana PHP: UTF-8 un mbstring
2026. gada statuss un droša lietošana
Secinājums: izmantojiet vienu skaidri noteiktu kodējumu — parasti UTF-8 — HTML formā, HTTP atbildē, PHP pirmkodā, virkņu apstrādē un datu bāzes savienojumā. Pirms globālo iestatījumu maiņas saglabājiet neapstrādāto ievadi un atrodiet robežu, kurā baiti tiek dekodēti nepareizi.
Ko jūs uzzināsiet
- Kā atšķirt attēlošanas problēmu no ievades pārkodēšanas vai datu bojājuma datu bāzē.
- Kuras galvenes un PHP iestatījumi attiecas uz mūsdienu UTF-8 lietojumprogrammām.
- Kāpēc tālāk norādīto mantoto
mbstring.internal_encodingunmbstring.http_inputrecepti nevajadzētu kopēt pašreizējā izvietojumā.
Kam tas paredzēts: PHP uzturētājiem, kuri novērš mojibake pēc formas validēšanas, pāradresācijas vai datu saglabāšanas un atkārtotas nolasīšanas no datu bāzes.
2026. gada konteksts: PHP 5.6 novecoja vecās iconv/mbstring kodējuma direktīvas, dodot priekšroku default_charset; mūsdienu kodā kodējums skaidri jānosaka pie katras sistēmu robežas. Sākotnējā konfigurācija saglabāta tikai vēsturiskā incidenta izskaidrošanai.
Drošības piezīme. Sākotnējā rakstā esošās komandas un konfigurācijas piemēri nav atkārtoti izpildīti pašreizējā ražošanas vidē. Pirms to lietošanas pārbaudiet atbalstītās versijas, dublējumus, piekļuves vadīklas un atcelšanas darbības atsevišķā testa vidē.
Galvenie oficiālie avoti
Pārskats
Vēsturiskajā incidentā PHP formas teksts tika izkropļots, pārejot no ievades ekrāna uz apstiprinājuma ekrānu vai atgriežoties formā pēc validācijas kļūdas.
Tā kā serveris bija tikko konfigurēts, izmeklēšana sākās ar PHP kodējuma iestatījumiem. Tālāk aprakstīts toreizējais atradums un tā ierobežojumi mūsdienu PHP vidē.
Satura rādītājs
1. Kodējuma maiņas vietas diagnostika
Lai noteiktu problēmas cēloni, vispirms jāsaprot, kurā apstrādes posmā mainās baitu interpretācija.
1-1. PHP iestatījumu pārbaude
Vēsturiskajā vidē vispirms tika pārbaudīti PHP iestatījumi failā php.ini.
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
Šīs vērtības šķita atbilstošas, un pirmkodā acīmredzams cēlonis netika atrasts. Atkārtoti pārbaudot php.ini, uzmanību piesaistīja vēl viens iestatījums:
mbstring.http_input = auto
Tā kā vērtība auto neparādīja faktiski izvēlēto ievades kodējumu, diagnostikas nolūkā tā tika nomainīta uz UTF-8:
mbstring.http_input = UTF-8
Konkrētajā vēsturiskajā vidē šī izmaiņa novērsa teksta izkropļojumu. mbstring.http_input noteica saņemto HTTP pieprasījumu pārkodēšanu, taču šī direktīva ir novecojusi un nav mūsdienu PHP risinājums.
2. Kopsavilkums
Ja teksts tiek izkropļots, izsekojiet kodējumu no HTML formas un HTTP galvenēm līdz PHP virkņu apstrādei un datu bāzes savienojumam. Tālāk redzamie mbstring iestatījumi izskaidro vēsturisko gadījumu, taču tos nevajadzētu kopēt mūsdienu izvietojumā; kodējumu skaidri nosakiet katrā robežā un izmantojiet pašlaik atbalstītās PHP direktīvas.