Maison >développement back-end >Problème PHP >Que dois-je faire si des caractères chinois tronqués apparaissent dans la requête php get ?
Solution au code chinois tronqué dans la requête php get : 1. Utilisez la méthode [$name = iconv("gbk","utf-8",$name);] pour résoudre le code tronqué ; Méthode mb_convert_encoding ($ nom, "utf-8", "gbk");]
Recommandé : "Tutoriel vidéo PHP"
php reçoit des paramètres chinois tronqués transmis par le GET méthode
J'ai récemment écrit une page simple et transmis les paramètres chinois depuis le navigateur (test.php?name=test). Quelle que soit la façon dont j'ai défini la page utf-8, des caractères tronqués étaient affichés. Je l'ai cherché sur Google. J'ai trouvé beaucoup de solutions, mais quelle est la cause du problème ? Personne n’a étudié cette question en profondeur. Par curiosité, il fallait que j'en vérifie la cause, et cela me permettrait aussi d'acquérir de l'expérience !
Tout d'abord, jetons un coup d'œil au code de test simple :
<?php header("Content-Type:text/html;charset=UTF-8"); $name = $_GET['name']; var_dump($name); ?>
Les résultats du test sont les suivants :
Le code indique que l'encodage du contenu de la réponse est utf-8, et le le contenu affiché est en effet tronqué. Veuillez noter ici que la longueur de la variable sortie par var_dump n'est que de 4. Évidemment, la longueur des deux caractères chinois doit être supérieure à 4 octets sous l'encodage utf-8. Jetons ensuite un œil à l'accès de Firefox à cette page url<.>
FireFox encode automatiquement l'URL en chinois, nous pouvons donc voir que le test devient %B2%E2%CA%D4. Évidemment, un mot ici fait deux octets, ce qui est un format d'encodage chinois tel que gb2313, gbk, etc., pas utf. 8 encodage. Si on change l'encodage de la page en gbk, les paramètres chinois s'afficheront normalement, voir l'image ci-dessousEnsuite on fait un autre test, le code est le suivant :
<?php header("Content-Type:text/html;charset=UTF-8"); $name = $_GET['name']; var_dump($name); ?>Résultat du test, affichage normal : Alors , qu'est-ce que c'est ? Qu'est-ce qui cause ce problème ? La réponse est que l'encodage par défaut du navigateur pose problème. Nous utilisons tous le système chinois, et l'encodage par défaut du navigateur sera naturellement défini sur la localisation. Par exemple, l'encodage par défaut d'IE et. FireFox sur mon propre ordinateur est tous deux de la série gb. Lorsque le navigateur demandera l'url saisie par l'utilisateur, il enverra le chinois dans l'url dans le format d'encodage par défaut au lieu du format d'encodage de la page. C'est pourquoi le lien avec le chinois dans la page est. normal et nous La raison pour laquelle le lien saisi manuellement est tronqué. De la même manière, si nous ajustons le codage par défaut du navigateur en utf-8, alors le chinois dans l'URL d'entrée sera codé en utf-8. En plus de ce qui précède, cette situation se produira dans les situations suivantes : Si l'adresse générée par la page encodée en gbk est liée à la page utf-8, les chinois du La page gbk est conforme à Le format de codage de gbk est transmis à la page suivante, donc des caractères tronqués apparaîtront définitivement après avoir reçu le codage utf-8. Le module de réécriture d'url d'IIS, l'encodage chinois réécrit est également gbk. Si votre page est encodée en utf-8, les paramètres de réécriture seront invalides. Dans des situations comme celles-ci, nous devons utiliser la fonction de transcodage intégrée de PHP pour résoudre les problèmes d'encodage : Option 1 :
$name = iconv("gbk","utf-8",$name);Option 2 :
mb_convert_encoding($name, "utf-8", "gbk");
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!