Salabojiet nejauši bojātu formas ievadi PHP: UTF-8 un mbstring
Publikācijas datums:
Atjaunināts:
Tehniskie raksti > Salabojiet nejauši bojātu formas ievadi PHP: UTF-8 un mbstring
2026. gada statuss un droša lietošana
Secinājums: saglabājiet vienu skaidru kodējumu — parasti UTF-8 — visā HTML formā, HTTP atbildē, PHP avotā, virkņu apstrādē un datu bāzes savienojumā. Pirms globālo iestatījumu maiņas tveriet neapstrādāto ievadi un identificējiet robežu, kurā baiti tiek dekodēti nepareizi.
Ko jūs uzzināsiet
- Kā atšķirt displeja problēmu no ievades konvertēšanas vai datu bāzes bojājumu.
- 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 ir paredzēts: PHP uzturētāji veic mojibake problēmu novēršanu pēc veidlapas validācijas, novirzīšanas vai datu bāzes braucieniem turp un atpakaļ.
2026. gada konteksts: PHP ir novecojusi vecās iconv/mbstring kodēšanas direktīvas PHP 5.6, par labu default_charset; modernajam kodam ir jāpadara kodējums skaidri saprotams katrā robežā. Sākotnējā konfigurācija tiek saglabāta tikai, lai izskaidrotu vēsturisko notikumu.
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.
Pārvietojoties no ievades ekrāna uz PHP apstiprinājuma ekrānu, parādījās sajaukts teksts.
Ievadot tekstu veidlapā un pārejot uz apstiprinājuma ekrānu, teksts tiek izkropļots.
Garbled teksts rodas arī pārejot uz savu ekrānu ievades pārbaudes kļūdu dēļ.
Tā kā serveris bija tikko uzbūvēts, man šķita, ka PHP konfigurācijā kaut kā trūkst, tāpēc es aprakstīšu, ko es toreiz atklāju.
Saturs
1. izmeklēšana (lai noskaidrotu kāda notikuma cēloni)
Lai noskaidrotu problēmas cēloni, tika pārbaudīta šāda informācija.
1-1. apsekojums
Vispirms pārbaudiet PHP iestatījumus (php.ini).
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
Tas ir tā, kā aprakstīts iepriekš, un šķiet, ka viss ir kārtībā.
Tad problēmu, šķiet, rada PHP avots.
Tomēr PHP avots neidentificēja iespējamo problēmu.
Vēlreiz, Es pārbaudīju php.ini par aizdomīgiem iestatījumiem un atradu vienu aizdomīgu iestatījumu.
mbstring.http_input = auto
Nebija skaidrs, vai tas ir kodēts UTF-8 formātā, jo bija iestatīts automātiskais iestatījums, tāpēc tas tika mainīts šādi, lai to izmēģinātu.
mbstring.http_input = UTF-8
Veiksmīgi atrisināts izkropļots teksts.
Šis iestatījums ir nepieciešams modulim mbstring, ja PHP tiek izmantotas daudzbitu virknes, piemēram, japāņu valodā.
Saņemto http pieprasījumu kodēšanas konfigurēšana.
2. kopsavilkums
Ja rodas teksta izkropļojumi, vispirms mēģiniet sakārtot apstrādes plūsmu.
Ja, izmantojot PHP, pārejot no ievades ekrāna uz apstiprinājuma ekrānu vai citām ekrāna pārejām, rodas izkropļotas rakstzīmes, ir aizdomas par šādiem php.ini iestatījumiem.
Noklusējuma iestatījums ir 'auto', tāpēc pārbaudiet šo iestatījumu, ja lietojat mbstring, lai apstrādātu daudzbitu virknes.
Paldies, ka noskatījāties līdz beigām.