Naprawa uszkodzonych danych formularza w PHP: UTF-8 i mbstring


Data publikacji:

Aktualizacja:


Artykuły > Naprawa uszkodzonych danych formularza w PHP: UTF-8 i mbstring

Stan na rok 2026 i bezpieczne użytkowanie

Wniosek: Zachowaj jedno jawne kodowanie – zwykle UTF-8 – w formularzu HTML, odpowiedzi HTTP, źródle PHP, obsłudze ciągów i połączeniu z bazą danych. Przechwyć nieprzetworzone dane wejściowe i zidentyfikuj granicę, w której bajty są nieprawidłowo dekodowane, przed zmianą ustawień globalnych.

Czego się nauczysz

  • Jak odróżnić problem z wyświetlaniem od konwersji danych wejściowych lub uszkodzenia bazy danych.
  • Które nagłówki i ustawienia PHP są istotne dla współczesnych aplikacji UTF-8.
  • Dlaczego poniższe receptury mbstring.internal_encoding i mbstring.http_input nie powinny być kopiowane do bieżącego wdrożenia.

Dla kogo to jest przeznaczone: Opiekunowie PHP rozwiązujący problemy z mojibake po sprawdzeniu poprawności formularza, przekierowaniach lub podróżach po bazie danych.

Pozycja na rok 2026: PHP wycofało stare dyrektywy dotyczące kodowania iconv/mbstring w PHP 5.6 na rzecz default_charset; nowoczesny kod powinien wyraźnie określać kodowanie na każdej granicy. Oryginalna konfiguracja została zachowana jedynie w celu wyjaśnienia zdarzenia historycznego.

Uwaga dotycząca bezpieczeństwa: polecenia i przykłady konfiguracji z pierwotnego artykułu nie zostały ponownie uruchomione we współczesnym środowisku produkcyjnym. Przed użyciem sprawdź wspierane wersje, kopie zapasowe, kontrolę dostępu i procedurę wycofania w oddzielnym środowisku testowym.

Oficjalne źródła pierwotne

Przegląd

Podczas przechodzenia z ekranu wprowadzania danych do ekranu potwierdzenia w PHP występował zniekształcony tekst.

Tekst jest zniekształcony podczas wprowadzania tekstu w formularzu i przechodzenia do ekranu potwierdzenia.

Z powodu błędów sprawdzania danych wejściowych podczas przechodzenia do własnego ekranu pojawia się również zniekształcony tekst.

Ponieważ serwer był dopiero co zbudowany, czułem, że czegoś brakuje w konfiguracji PHP, więc opiszę, czego się wtedy dowiedziałem.


Spis treści

  1. dochodzenie (w celu ustalenia przyczyny czegoś)
  2. streszczenie

1. dochodzenie (w celu ustalenia przyczyny czegoś)

W celu zbadania przyczyny problemu przeanalizowano następujące informacje.

1-1. ankieta

Najpierw należy sprawdzić ustawienia PHP (php.ini).

php.ini


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

Jest on zgodny z opisem powyżej i wydaje się być w porządku.

Wtedy problem wydaje się być spowodowany przez źródło PHP.

Źródło PZP nie określiło jednak prawdopodobnego problemu.

Po raz kolejny sprawdziłem php.ini pod kątem podejrzanych ustawień i znalazłem jedno podejrzane ustawienie.

php.ini


mbstring.http_input = auto

Nie było jasne, czy jest on zakodowany w UTF-8, ponieważ był ustawiony na auto, więc aby go wypróbować, zmieniono go w następujący sposób.

php.ini


mbstring.http_input = UTF-8

Udało się rozwiązać problem zniekształconego tekstu.

To ustawienie jest konieczne dla modułu mbstring, gdy w PHP używa się wielobajtowych łańcuchów, takich jak japoński.

Konfiguracja kodowania otrzymywanych żądań http.

2. streszczenie

W przypadku wystąpienia zniekształconego tekstu należy najpierw spróbować zorganizować przepływ przetwarzania.

Jeśli podczas używania PHP do przechodzenia z ekranu wprowadzania do ekranu potwierdzania lub innych przejść między ekranami występują zniekształcone znaki, należy sprawdzić następujące ustawienia w pliku php.ini.

Domyślnym ustawieniem jest "auto", więc należy je sprawdzić, gdy używamy mbstring do przetwarzania ciągów wielobajtowych.

■INFORMATION

Artykuły


■PROFILE

Profil


■Kontakt

Kontakt