Åtgärda felaktiga formulärtecken i PHP med UTF-8 och mbstring


Datum för offentliggörande:

Uppdaterad:


Tekniska artiklar > Åtgärda felaktiga formulärtecken i PHP med UTF-8 och mbstring

2026 status och säker användning

Slutsats: Behåll en explicit kodning – normalt UTF-8 – över HTML-formuläret, HTTP-svaret, PHP-källan, stränghanteringen och databasanslutningen. Fånga den råa indata och identifiera gränsen där bytes avkodas felaktigt innan du ändrar globala inställningar.

Vad du kommer att lära dig

  • Hur man skiljer ett visningsproblem från indatakonvertering eller databaskorruption.
  • Vilka rubriker och PHP-inställningar är relevanta för moderna UTF-8-applikationer.
  • Varför bör det äldre receptet mbstring.internal_encoding och mbstring.http_input nedan inte kopieras till en aktuell distribution.

Vem detta är till för: PHP-underhållare som felsöker mojibake efter formulärvalidering, omdirigeringar eller databasresor.

2026-kontext: PHP utfasade de gamla iconv/mbstring-kodningsdirektiven i PHP 5.6 till förmån för default_charset; modern kod bör göra kodning explicit vid varje gräns. Den ursprungliga konfigurationen behålls endast för att förklara den historiska händelsen.

Säkerhetsanmärkning: Kommandona och konfigurationsexemplen i den ursprungliga artikeln har inte körts om i en aktuell produktionsmiljö. Verifiera versioner som stöds, säkerhetskopior, åtkomstkontroller och återställningssteg i en separat testmiljö innan du använder dem.

Viktiga officiella källor

Översikt.

Förvrängd text uppstod när man gick från inmatningsskärmen till bekräftelseskärmen i PHP.

Texten är förvrängd när du skriver in text i formuläret och går till bekräftelseskärmen.

Förvrängd text förekommer också vid övergång till den egna skärmen på grund av fel i inmatningskontrollen.

Eftersom servern precis hade byggts upp kände jag att något saknades i PHP-konfigurationen, så jag kommer att beskriva vad jag upptäckte då.


Innehållsförteckning

  1. utredning (för att fastställa orsaken till något)
  2. sammanfattning

1. utredning (för att fastställa orsaken till något)

Följande information undersöktes för att utreda orsaken till problemet.

1-1. Undersökning

Kontrollera först PHP-inställningarna (php.ini).

php.ini


default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On

Det är som beskrivet ovan och verkar vara bra.

Då verkar problemet bero på PHP-källan.

PHP-källan identifierade dock inte det troliga problemet.

Återigen kontrollerade jag php.ini för misstänkta inställningar och hittade en misstänkt inställning.

php.ini


mbstring.http_input = auto

Det var oklart om den var kodad i UTF-8 eftersom den var inställd på auto, så den ändrades på följande sätt för att testa det.

php.ini


mbstring.http_input = UTF-8

Framgångsrik lösning på förvrängd text.

Den här inställningen är nödvändig för mbstring-modulen när du använder multibyte-strängar, t.ex. japanska, i PHP.

Konfigurering av kodningen av mottagna http-förfrågningar.

2. sammanfattning

Om förvrängd text uppstår, försök först att organisera bearbetningsflödet.

Om du upplever förvrängda tecken när du använder PHP för att övergå från inmatningsskärmen till bekräftelseskärmen eller andra skärmövergångar kan du misstänka följande inställningar i php.ini.

Standardinställningen är "auto", så kontrollera detta när du använder mbstring för att bearbeta multibyte-strängar.

Tack för att du tittade på till slutet.