Ret ødelagte formulartegn i PHP med UTF-8 og mbstring


Udgivet:

Opdateret:


Artikler › Ret ødelagte formulartegn i PHP med UTF-8 og mbstring

Status i 2026 og sikker brug

Konklusion: Hold én eksplicit kodning – normalt UTF-8 – på tværs af HTML-formularen, HTTP-svaret, PHP-kilden, strenghåndteringen og databaseforbindelsen. Indfang det rå input og identificer grænsen, hvor bytes dekodes forkert, før du ændrer globale indstillinger.

Det lærer du

  • Sådan skelnes et visningsproblem fra inputkonvertering eller databasekorruption.
  • Hvilke overskrifter og PHP-indstillinger er relevante for moderne UTF-8-applikationer.
  • Hvorfor bør den ældre mbstring.internal_encoding og mbstring.http_input opskrift nedenfor ikke kopieres til en aktuel implementering.

Målgruppe: PHP-vedligeholdere, der fejlfinder mojibake efter formularvalidering, omdirigeringer eller database-rundture.

Aktuel status i 2026: PHP udfasede de gamle iconv/mbstring-kodningsdirektiver i PHP 5.6 til fordel for default_charset; moderne kode bør gøre kodning eksplicit ved hver grænse. Den oprindelige konfiguration bibeholdes kun for at forklare den historiske hændelse.

Sikkerhedsbemærkning: Kommandoerne og konfigurationseksemplerne i den oprindelige artikel er ikke kørt igen i et aktuelt produktionsmiljø. Kontrollér understøttede versioner, tag backup, og forbered en rollback i et separat testmiljø før ændringerne anvendes.

Officielle kilder

Oversigt

Der opstod forvrænget tekst, når man gik fra indtastningsskærmen til bekræftelsesskærmen i PHP.

Teksten er forvrænget, når du indtaster tekst i formularen og går til bekræftelsesskærmen.

Der opstår også forvrænget tekst ved overgang til egen skærm på grund af fejl i indtastningskontrollen.

Da serveren lige var blevet bygget, følte jeg, at der manglede noget i PHP-konfigurationen, så jeg vil beskrive, hvad jeg fandt ud af på det tidspunkt.


Indholdsfortegnelse

  1. undersøgelse (for at fastslå årsagen til noget)
  2. Opsummering

1. undersøgelse (for at fastslå årsagen til noget)

Følgende oplysninger blev undersøgt for at finde frem til årsagen til problemet.

1-1. undersøgelse

Først skal du kontrollere PHP-indstillingerne (php.ini).

php.ini


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

Den er som beskrevet ovenfor og ser ud til at være i orden.

Så problemet ser ud til at være forårsaget af PHP-kilden.

PHP-kilden identificerede dog ikke det sandsynlige problem.

Endnu en gang tjekkede jeg php.ini for mistænkelige indstillinger og fandt en mistænkelig indstilling.

php.ini


mbstring.http_input = auto

Det var uklart, om den var kodet i UTF-8, fordi den var indstillet til auto, så den blev ændret som følger for at afprøve det.

php.ini


mbstring.http_input = UTF-8

Det er lykkedes at løse forvrænget tekst.

Denne indstilling er nødvendig for mbstring-modulet, når du bruger multibyte-strenge som f.eks. japansk i PHP.

Konfiguration af kodningen af modtagne http-anmodninger.

2. resumé

Hvis der opstår forvrænget tekst, skal du først forsøge at organisere behandlingsflowet.

Og hvis du oplever forvrængede tegn, når du bruger PHP til at gå fra indtastningsskærmen til bekræftelsesskærmen eller andre skærmovergange, skal du mistænke følgende indstillinger i php.ini.

Standardindstillingen er "auto", så tjek dette, når du bruger mbstring til at behandle multibyte-strenge.

Det opsummerer de vigtigste trin og begrænsninger.