Διόρθωση διεφθαρμένης εισαγωγής φόρμας σε PHP: UTF-8 και mbstring
Δημοσιεύτηκε:
Ενημερώθηκε:
Άρθρα › Διόρθωση διεφθαρμένης εισαγωγής φόρμας σε PHP: UTF-8 και mbstring
Κατάσταση το 2026 και ασφαλής χρήση
Συμπέρασμα: Διατηρήστε μια ρητή κωδικοποίηση—συνήθως UTF-8—σε όλη τη φόρμα HTML, την απόκριση HTTP, την πηγή PHP, τον χειρισμό συμβολοσειρών και τη σύνδεση βάσης δεδομένων. Καταγράψτε την ακατέργαστη είσοδο και εντοπίστε το όριο όπου τα byte αποκωδικοποιούνται λανθασμένα πριν αλλάξετε τις καθολικές ρυθμίσεις.
Τι θα μάθετε
- Πώς να διακρίνετε ένα πρόβλημα εμφάνισης από τη μετατροπή εισόδου ή την καταστροφή της βάσης δεδομένων.
- Ποιες κεφαλίδες και ρυθμίσεις PHP σχετίζονται με τις σύγχρονες εφαρμογές UTF-8.
- Γιατί η παρακάτω συνταγή
mbstring.internal_encodingκαιmbstring.http_inputδεν πρέπει να αντιγραφεί σε μια τρέχουσα ανάπτυξη.
Σε ποιους απευθύνεται: Οι συντηρητές της PHP αντιμετωπίζουν προβλήματα με το mojibake μετά από επικύρωση φόρμας, ανακατευθύνσεις ή ταξίδια μετ' επιστροφής στη βάση δεδομένων.
Ισχύει το 2026: Η PHP κατάργησε τις παλιές οδηγίες κωδικοποίησης iconv/mbstring στην PHP 5.6 υπέρ του default_charset. Ο σύγχρονος κώδικας πρέπει να κάνει την κωδικοποίηση σαφή σε κάθε όριο. Η αρχική διαμόρφωση διατηρείται μόνο για να εξηγηθεί το ιστορικό περιστατικό.
Σημείωση ασφαλείας: Οι εντολές και τα παραδείγματα ρυθμίσεων του αρχικού άρθρου δεν έχουν εκτελεστεί ξανά σε σύγχρονο περιβάλλον παραγωγής. Πριν από την εφαρμογή, ελέγξτε τις υποστηριζόμενες εκδόσεις, δημιουργήστε αντίγραφα ασφαλείας και προετοιμάστε σχέδιο επαναφοράς σε ξεχωριστό περιβάλλον δοκιμών.
Επίσημες πηγές
Επισκόπηση
Εμφανίστηκε αλλοιωμένο κείμενο κατά τη μετάβαση από την οθόνη εισαγωγής στην οθόνη επιβεβαίωσης στην PHP.
Το κείμενο αλλοιώνεται κατά την εισαγωγή κειμένου στη φόρμα και τη μετάβαση στην οθόνη επιβεβαίωσης.
Εμφανίζεται επίσης αλλοιωμένο κείμενο κατά τη μετάβαση στη δική σας οθόνη λόγω σφαλμάτων ελέγχου εισόδου.
Καθώς ο διακομιστής είχε μόλις κατασκευαστεί, ένιωσα ότι κάτι έλειπε από τη διαμόρφωση της PHP, οπότε θα περιγράψω τι ανακάλυψα τότε.
Περιεχόμενα
1. έρευνα (για να προσδιοριστεί η αιτία κάποιου γεγονότος)
Για τη διερεύνηση της αιτίας του προβλήματος ερευνήθηκαν οι ακόλουθες πληροφορίες.
1-1. έρευνα
Αρχικά, ελέγξτε τις ρυθμίσεις της PHP (php.ini).
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
Είναι όπως περιγράφεται παραπάνω και φαίνεται να είναι εντάξει.
Τότε το πρόβλημα φαίνεται να προκαλείται από την πηγή PHP.
Ωστόσο, η πηγή PHP δεν προσδιόρισε το πιθανό πρόβλημα.
Για άλλη μια φορά, έλεγξα το php.ini για ύποπτες ρυθμίσεις και βρήκα μια ύποπτη ρύθμιση.
mbstring.http_input = auto
Δεν ήταν σαφές αν ήταν κωδικοποιημένο σε UTF-8 επειδή είχε οριστεί σε auto, οπότε άλλαξε ως εξής για να το δοκιμάσουμε.
mbstring.http_input = UTF-8
Επιλύθηκε επιτυχώς το αλλοιωμένο κείμενο.
Αυτή η ρύθμιση είναι απαραίτητη για την ενότητα mbstring όταν χρησιμοποιούνται συμβολοσειρές πολλαπλών byte όπως τα ιαπωνικά στην PHP.
Διαμόρφωση της κωδικοποίησης των λαμβανόμενων αιτήσεων http.
2. περίληψη
Αν εμφανιστεί αλλοιωμένο κείμενο, προσπαθήστε πρώτα να οργανώσετε τη ροή επεξεργασίας.
Και αν αντιμετωπίζετε αλλοιωμένους χαρακτήρες κατά τη χρήση της PHP για τη μετάβαση από την οθόνη εισαγωγής στην οθόνη επιβεβαίωσης ή άλλες μεταβάσεις οθόνης, υποψιαστείτε τις ακόλουθες ρυθμίσεις στο αρχείο php.ini.
Η προεπιλεγμένη ρύθμιση είναι 'auto', οπότε ελέγξτε το όταν χρησιμοποιείτε το mbstring για την επεξεργασία συμβολοσειρών πολλαπλών byte.
Αυτά είναι τα βασικά βήματα και οι περιορισμοί που πρέπει να ληφθούν υπόψη.
■Άρθρα
■Προφίλ
■Επικοινωνία