Oprava poškodeného vstupu z formulára v PHP: UTF-8 a mbstring
Dátum vydania:
Aktualizované:
Technické články > Oprava poškodeného vstupu z formulára v PHP: UTF-8 a mbstring
Stav 2026 a bezpečné používanie
Záver: Ponechajte jedno explicitné kódovanie – zvyčajne UTF-8 – vo formulári HTML, odpovedi HTTP, zdroji PHP, spracovaní reťazcov a pripojení k databáze. Pred zmenou globálnych nastavení zachyťte nespracovaný vstup a identifikujte hranicu, kde sa bajty dekódujú nesprávne.
Čo sa naučíte
- Ako odlíšiť problém so zobrazením od chybnej konverzie vstupu alebo poškodenia údajov v databáze.
- Ktoré hlavičky a nastavenia PHP sú relevantné pre moderné aplikácie UTF-8.
- Prečo by sa historický postup s direktívami
mbstring.internal_encodingambstring.http_inputuvedený nižšie nemal skopírovať do aktuálneho nasadenia.
Pre koho je to určené: Správcovia PHP, ktorí riešia poškodený text po overení formulára, presmerovaní alebo zápise do databázy a spätnom načítaní.
Kontext v roku 2026: PHP označilo staré direktívy kódovania iconv/mbstring v PHP 5.6 za zastarané v prospech default_charset; moderná aplikácia má kódovanie určovať explicitne na každom rozhraní. Pôvodná konfigurácia zostáva iba ako vysvetlenie historického incidentu.
Bezpečnostná poznámka: Príkazy a príklady konfigurácie v pôvodnom článku neboli znovu spustené v aktuálnom produkčnom prostredí. Pred ich použitím overte podporované verzie, zálohy, prístupové oprávnenia a postup obnovy v oddelenom testovacom prostredí.
Hlavné oficiálne zdroje
Prehľad
V PHP aplikácii sa pri prechode zo vstupného formulára na stránku s potvrdením zobrazil poškodený text.
Znaky sa poškodili po odoslaní textu z formulára.
Rovnaký problém nastal aj pri návrate na formulár po chybe validácie vstupu.
Keďže išlo o novo nakonfigurovaný server, kontrola sa zamerala na nastavenie PHP. Nasledujúce odseky zachytávajú vtedajšiu diagnostiku.
Obsah
1. Diagnostika
Pri hľadaní príčiny sa kontrolovali nasledujúce nastavenia.
1-1. Kontrola nastavení
Najprv sa skontrolovalo kódovanie v súbore php.ini.
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
Uvedené hodnoty vyzerali správne.
Ďalším podozrivým miestom bol preto zdrojový kód PHP.
Kontrola kódu však neodhalila pravdepodobnú príčinu.
Pri opätovnej kontrole php.ini sa našla ešte jedna relevantná direktíva.
mbstring.http_input = auto
Hodnota "auto" neurčovala UTF-8 explicitne, preto sa v pôvodnom prostredí skúšobne zmenila takto:
mbstring.http_input = UTF-8
Po tejto zmene sa poškodené znaky v danom prostredí prestali objavovať.
Direktíva patrila k modulu mbstring, ktorý spracúva viacbajtové reťazce, napríklad text v japončine.
Určovala kódovanie vstupu prijatého v požiadavke HTTP.
2. Zhrnutie
Pri poškodenom texte najprv zmapujte celý tok údajov: formulár, požiadavku HTTP, spracovanie v PHP, odpoveď a prípadne databázu.
V tomto historickom prípade problém súvisel s direktívou mbstring.http_input v súbore php.ini.
Direktívy z uvedeného starého prostredia však nekopírujte do modernej inštalácie. V aktuálnom PHP určte UTF-8 explicitne na každom rozhraní a používajte podporované nastavenia.
Pred globálnou zmenou konfigurácie vždy zachyťte pôvodné bajty a určte presné miesto nesprávneho dekódovania.
Technické články
Profil
Kontakt