Korjaa PHP-lomakkeiden merkistövirheet UTF-8:lla ja mbstringillä


Julkaistu:

Päivitetty:


Artikkelit › Korjaa PHP-lomakkeiden merkistövirheet UTF-8:lla ja mbstringillä

Tilanne vuonna 2026 ja turvallinen käyttö

Johtopäätös: Säilytä yksi eksplisiittinen koodaus – tavallisesti UTF-8 – HTML-lomakkeessa, HTTP-vastauksessa, PHP-lähteessä, merkkijonojen käsittelyssä ja tietokantayhteydessä. Kaappaa raakasyöte ja tunnista raja, jossa tavut puretaan väärin, ennen kuin muutat yleisiä asetuksia.

Mitä opit

  • Näyttöongelman erottaminen syötteen muuntamisesta tai tietokannan vioittumisesta.
  • Mitkä otsikot ja PHP-asetukset liittyvät nykyaikaisiin UTF-8-sovelluksiin.
  • Miksi alla olevia vanhoja mbstring.internal_encoding- ja mbstring.http_input-reseptejä ei pitäisi kopioida nykyiseen käyttöön.

Kenelle artikkeli on tarkoitettu: PHP-ylläpitäjät suorittavat mojibaken vianetsintää lomakkeen tarkistuksen, uudelleenohjausten tai tietokannan kiertomatkojen jälkeen.

2026-asema: PHP poisti vanhat iconv/mbstring-koodausohjeet PHP 5.6:sta default_charset:n sijaan; nykyaikaisen koodin tulisi tehdä koodauksesta eksplisiittinen jokaisella rajalla. Alkuperäinen kokoonpano säilytetään vain historiallisen tapahtuman selittämiseksi.

Turvallisuushuomautus: Alkuperäisen artikkelin komentoja ja määritysesimerkkejä ei ole suoritettu uudelleen nykyaikaisessa tuotantoympäristössä. Tarkista tuetut versiot, ota varmuuskopio ja valmistele palautus erillisessä testiympäristössä ennen käyttöönottoa.

Viralliset lähteet

Yleiskatsaus

PHP:ssä esiintyi epäselvää tekstiä, kun siirryttiin syöttöruudusta vahvistusruudulle.

Teksti on epäselvää, kun kirjoitat tekstiä lomakkeeseen ja siirryt vahvistusnäyttöön.

Epäselvää tekstiä esiintyy myös siirryttäessä omaan näyttöön syötteen tarkistusvirheiden vuoksi.

Koska palvelin oli juuri rakennettu, minusta tuntui, että PHP-konfiguraatiosta puuttui jotain, joten kuvaan, mitä sain selville tuolloin.


Sisällysluettelo

  1. tutkimus (jonkin asian syyn selvittäminen)
  2. Yhteenveto

1. tutkimus (jonkin asian syyn selvittäminen)

Ongelman syyn selvittämiseksi tutkittiin seuraavia tietoja.

1-1. kyselytutkimus

Tarkista ensin PHP-asetukset (php.ini).

php.ini


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

Se on edellä kuvatun mukainen ja näyttää olevan kunnossa.

Sitten ongelma näyttää johtuvan PHP-lähteestä.

PHP-lähde ei kuitenkaan tunnistanut todennäköistä ongelmaa.

Tarkistin jälleen kerran php.ini:n epäilyttävien asetusten varalta ja löysin yhden epäilyttävän asetuksen.

php.ini


mbstring.http_input = auto

Oli epäselvää, oliko se koodattu UTF-8-koodilla, koska se oli asetettu automaattiseksi, joten se muutettiin seuraavasti, jotta sitä voitiin kokeilla.

php.ini


mbstring.http_input = UTF-8

Onnistuneesti ratkaistu sekava teksti.

Tämä asetus on tarpeen mbstring-moduulille, kun PHP:ssä käytetään monitavuisia merkkijonoja, kuten japania.

Vastaanotettujen http-pyyntöjen koodauksen määrittäminen.

2. yhteenveto

Jos teksti on epäselvää, yritä ensin järjestää käsittelyvirta.

Ja jos havaitset vääristyneitä merkkejä, kun käytät PHP:tä siirtyessäsi syöttönäytöstä vahvistusnäyttöön tai muihin näytön siirtymiin, epäile seuraavia asetuksia php.ini:ssä.

Oletusasetus on 'auto', joten tarkista tämä, kun käytät mbstringiä monitavuisten merkkijonojen käsittelyyn.

Tässä ovat tärkeimmät huomioitavat vaiheet ja rajoitukset.