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- jambstring.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)
Ongelman syyn selvittämiseksi tutkittiin seuraavia tietoja.
1-1. kyselytutkimus
Tarkista ensin PHP-asetukset (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.
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.
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.
■Artikkelit
■Profiili
■Yhteystiedot