Corriger l’encodage des formulaires PHP avec UTF-8 et mbstring
Date de publication:
Mise à jour :
Articles > Corriger l’encodage des formulaires PHP avec UTF-8 et mbstring
Statut 2026 et utilisation sûre
Conclusion : Conservez un codage explicite (normalement UTF-8) pour le formulaire HTML, la réponse HTTP, la source PHP, la gestion des chaînes et la connexion à la base de données. Capturez l'entrée brute et identifiez la limite où les octets sont mal décodés avant de modifier les paramètres globaux.
Ce que vous apprendrez
- Comment distinguer un problème d'affichage d'une conversion d'entrée ou d'une corruption de base de données.
- Quels en-têtes et paramètres PHP sont pertinents pour les applications UTF-8 modernes.
- Pourquoi les anciennes recettes
mbstring.internal_encodingetmbstring.http_inputci-dessous ne doivent pas être copiées dans un déploiement actuel.
À qui s'adresse : Les responsables PHP résolvent les problèmes de Mojibake après la validation d'un formulaire, des redirections ou des allers-retours dans la base de données.
Note de mise à jour (2026) : PHP a déprécié les anciennes directives d'encodage iconv/mbstring dans PHP 5.6 au profit de default_charset ; le code moderne devrait rendre le codage explicite à chaque limite. La configuration originale est conservée uniquement pour expliquer l'incident historique.
Note de sécurité : les commandes et exemples de configuration de l'article d'origine n'ont pas été rejoués dans un environnement de production actuel. Avant toute application, vérifiez les versions prises en charge, les sauvegardes, les contrôles d'accès et la procédure de retour arrière dans un environnement de test isolé.
Sources primaires officielles
Vue d’ensemble
Un texte déformé apparaissait lors du passage de l'écran de saisie à l'écran de confirmation en PHP.
Le texte est déformé lors de la saisie du texte dans le formulaire et du passage à l'écran de confirmation.
Un texte déformé se produit également lors de la transition vers l'écran personnel en raison d'erreurs de vérification de la saisie.
Comme le serveur venait juste d'être construit, j'ai senti que quelque chose manquait dans la configuration de PHP, je vais donc décrire ce que j'ai découvert à ce moment-là.
Table des matières
1. enquête (pour déterminer la cause de quelque chose)
Les informations suivantes ont été examinées pour rechercher la cause du problème.
1-1. enquête
Tout d'abord, vérifiez les paramètres PHP (php.ini).
default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
Il est tel que décrit ci-dessus et semble être en bon état.
Alors le problème semble être causé par la source PHP.
Cependant, la source PHP n'a pas identifié le problème probable.
Une fois de plus, j'ai vérifié les paramètres suspects dans le php.ini et j'en ai trouvé un.
mbstring.http_input = auto
Il n'était pas clair s'il était encodé en UTF-8 car il était réglé sur auto, il a donc été modifié comme suit pour l'essayer.
mbstring.http_input = UTF-8
Le texte brouillé a été résolu avec succès.
Ce paramètre est nécessaire pour le module mbstring lors de l'utilisation de chaînes de caractères multi-octets comme le japonais en PHP.
Configuration de l'encodage des requêtes http reçues.
2. résumé
Si le texte est brouillé, essayez d'abord d'organiser le flux de traitement.
Et si vous rencontrez des caractères tronqués lorsque vous utilisez PHP pour passer de l'écran de saisie à l'écran de confirmation ou à d'autres transitions d'écran, soupçonnez les paramètres suivants dans le php.ini.
Le paramètre par défaut est 'auto', donc vérifiez-le lorsque vous utilisez mbstring pour traiter des chaînes multi-octets.