Maison  >  Article  >  développement back-end  >  Que dois-je faire si des caractères chinois tronqués apparaissent dans la requête php get ?

Que dois-je faire si des caractères chinois tronqués apparaissent dans la requête php get ?

藏色散人
藏色散人original
2020-08-24 09:34:594061parcourir

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");]

Que dois-je faire si des caractères chinois tronqués apparaissent dans la requête php get ?

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[&#39;name&#39;];   
var_dump($name);   
?>

Les résultats du test sont les suivants :

Que dois-je faire si des caractères chinois tronqués apparaissent dans la requête php get ?

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<.>

Que dois-je faire si des caractères chinois tronqués apparaissent dans la requête php get ?

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-dessous

Que dois-je faire si des caractères chinois tronqués apparaissent dans la requête php get ?

Ensuite on fait un autre test, le code est le suivant :

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>   
  

Résultat du test, affichage normal :

Que dois-je faire si des caractères chinois tronqués apparaissent dans la requête php get ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn