Verkeerde formuliertekens in PHP herstellen met UTF-8 en mbstring
Datum van publicatie:
Bijgewerkt:
Artikelen > Verkeerde formuliertekens in PHP herstellen met UTF-8 en mbstring
2026 status en veilig gebruik
Conclusie: Houd één expliciete codering UTF-8 Neem de ruwe invoer op en identificeer de grens waar bytes verkeerd worden gedecodeerd voordat de globale instellingen worden gewijzigd.
Wat je zult leren
- Hoe onderscheid je een display probleem van input conversie of database corruptie.
- Welke headers en PHP-instellingen relevant zijn voor moderne UTF-8 toepassingen.
- Waarom de erfenis
mbstring.internal_encodingenmbstring.http_inputrecept hieronder mag niet worden gekopieerd naar een huidige implementatie.
Voor wie: PHP-onderhouders probleemoplossing mojibake na vormvalidatie, redirects, of database ronde trips.
Actualisatie voor 2026: PHP depreceerde de oude pictogram/mbstring codering richtlijnen in PHP 5.6 ten gunste van default_charset; moderne code moet coderen expliciet aan elke grens. De oorspronkelijke configuratie wordt alleen behouden om het historische incident te verklaren.
Veiligheidsopmerking: de opdrachten en configuratievoorbeelden uit het oorspronkelijke artikel zijn niet opnieuw in een moderne productieomgeving uitgevoerd. Controleer ondersteunde versies, back-ups, toegangsbeheer en terugrolstappen eerst in een afzonderlijke testomgeving.
Officiële primaire bronnen
Overzicht
Er verscheen vervormde tekst bij het overgaan van het invoerscherm naar het bevestigingsscherm in PHP.
Tekst wordt vervormd wanneer tekst in het formulier wordt ingevoerd en naar het bevestigingsscherm wordt gegaan.
Vervormde tekst komt ook voor bij de overgang naar het eigen scherm als gevolg van fouten bij de invoercontrole.
Aangezien de server net gebouwd was, had ik het gevoel dat er iets ontbrak in de PHP configuratie, dus ik zal beschrijven wat ik toen ontdekte.
Inhoudsopgave
1. onderzoek (om de oorzaak van iets te achterhalen)
De volgende informatie werd onderzocht om de oorzaak van het probleem te achterhalen.
1-1. enquête
Controleer eerst de PHP instellingen (php.ini).
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
Het is zoals hierboven beschreven en lijkt in orde te zijn.
Dan lijkt het probleem te worden veroorzaakt door de PHP bron.
De PHP-bron gaf echter niet aan wat het waarschijnlijke probleem was.
Nogmaals, ik controleerde de php.ini voor verdachte instellingen en vond één verdachte instelling.
mbstring.http_input = auto
Het was onduidelijk of het in UTF-8 gecodeerd was omdat het op auto stond, dus werd het als volgt gewijzigd om het uit te proberen.
mbstring.http_input = UTF-8
Succesvol opgelost verminkte tekst.
Deze instelling is nodig voor de mbstring module bij het gebruik van multibyte strings zoals het Japans in PHP.
Configuratie van de encoding van ontvangen http verzoeken.
2. samenvatting
Als de tekst verminkt is, probeer dan eerst de verwerkingsstroom te organiseren.
En als u last hebt van vervormde tekens wanneer u PHP gebruikt om over te schakelen van het invoerscherm naar het bevestigingsscherm of andere schermovergangen, verdenk dan de volgende instellingen in php.ini.
De standaardinstelling is 'auto', dus controleer dit als je mbstring gebruikt om multibyte strings te verwerken.