Maison > développement back-end > Problème PHP > Que dois-je faire si php obtient des paramètres get tronqués ?

Que dois-je faire si php obtient des paramètres get tronqués ?

藏色散人
Libérer: 2023-03-08 07:54:01
original
1958 Les gens l'ont consulté

Solutions pour php pour obtenir des paramètres get tronqués : 1. Traitez l'encodage via "$str=iconv("gb2312","utf-8",$str);"; str,"utf-8", "gb2312");" méthode.

Que dois-je faire si php obtient des paramètres get tronqués ?

L'environnement d'exploitation de cet article : système Windows 7, PHP7.1, ordinateur Dell G3.

Étude approfondie sur PHP recevant le code tronqué des paramètres chinois GET

Je crois que beaucoup de PHPer rencontreront un tel problème : en utf-8, si vous accédez directement à l'adresse avec des paramètres chinois tels que test.php?s= test La valeur du paramètre de sortie d'une telle adresse sera tronquée. J'ai recherché des informations pertinentes sur le moteur de recherche, et seules quelques solutions ont été données, mais personne n'a étudié la cause de ce problème. J'écris cet article pour approfondir la cause de ce problème. Raison :

Nous démontrons d'abord ce problème. Le code de test et les résultats d'exécution sont les suivants.

Code :

Que dois-je faire si php obtient des paramètres get tronqués ?

Résultat du test :

Que dois-je faire si php obtient des paramètres get tronqués ?

Le code déclare que l'encodage du contenu de la réponse est utf-8, le contenu affiché est effectivement tronqué.


Veuillez noter icivar_dumpLa longueur de la variable de sortie est seulement 4 , évidemment, la longueur des deux caractères chinois doit être supérieure à 4 sous le utf-8 encodage des octets

Jetons ensuite un coup d'œil à l'accès de Firefox à cette pageurl

Que dois-je faire si php obtient des paramètres get tronqués ?

FireFox encodera automatiquement l'url chinoise, nous pouvons donc voir que le test devient %B2%E2%CA%D4 , évidemment, un mot ici fait deux octets, ce qui correspond à des formats d'encodage chinois tels que gb2313, gbk , etc., pas l'encodage utf-8. (Recommandé : "Tutoriel vidéo PHP")

Si nous changeons l'encodage de la page sur gbk, les paramètres chinois s'afficheront normalement, voir l'image ci-dessous

Que dois-je faire si php obtient des paramètres get tronqués ?

À ce moment-là, une question intéressante se pose : Comment des paramètres comme l'étiquette chinoise de emlog peuvent-ils ne pas contenir de caractères tronqués ?

Après plusieurs tests, j'ai constaté une petite différence :

emlogLe lien vers le paramètre chinois est généré sur la page, et dans notre test ci-dessus, on le saisit directement dans la barre d'adresse à la main,

Si on entre directement par exemple http://be-evil.org/?tag=Original Pour un tel lien, le programme indiquera également que la balise est introuvable

Le code de test est comme suit :


Que dois-je faire si php obtient des paramètres get tronqués ?

Résultats des tests, affichés normalement :


Que dois-je faire si php obtient des paramètres get tronqués ?

Veuillez faire attention au code url marqué dans la case rouge sur l'image ci-dessus. Les deux mots de ce test sont composés de Il se compose de 6 octets au lieu des 2 précédents, indiquant ainsi que les paramètres chinois sont correctement devenus l'encodage utf-8.

Alors, quelle est la cause de ce problème ?

La réponse est l'encodage par défaut du navigateur Nous utilisons tous le système chinois, l'encodage par défaut du navigateur. sera naturellement défini sur la localisation. Par exemple, l'encodage par défaut de IE et FireFox sur mon propre ordinateur est tous . Série gb, veuillez voir l'image ci-dessous :

IE Par défaut paramètres :


Que dois-je faire si php obtient des paramètres get tronqués ?

Paramètres par défaut pour Firefox :


Que dois-je faire si php obtient des paramètres get tronqués ?

En raison de ce paramètre, le navigateur utilisera par défaut url lorsqu'il demandera l'url saisie par l'utilisateur. Le chinois est envoyé dans le format d'encodage par défaut au lieu du format d'encodage de la page, c'est pourquoi les liens avec le chinois dans la page sont normaux mais les liens que nous saisissons manuellement seront tronqués. De la même manière, si on ajuste l'encodage par défaut du navigateur à utf-8, alors le chinois dans url sera saisi comme suit encodage utf-8.

En plus de ce qui précède, il existe également les situations suivantes dans lesquelles cela se produira :

Si l'adresse générée par gbk la page encodée est liée à utf-8 page, gbk la page est encodée en chinois selon le format de gbk et envoyée à la page suivante, puis utf-8Il y aura certainement des caractères tronqués après la réception de l'encodage.

Module de réécriture d'IIS, réécriture L'encodage chinois écrit est également gbk Si votre page est encodée en utf-8, alors les paramètres de réécriture seront invalides.

Dans ces cas, nous devons utiliser la fonction de transcodage intégrée de

php Traitons du problème d'encodage :

Solution

1 :

$str =iconv("gb2312","utf-8",$str);

Schéma

2 :

mb_convert_encoding( $str, "utf-8", "gb2312");

J'espère que cet article aidera ceux qui se grattent la tête en raison de problèmes d'encodage

PHPernous sommes utiles :)

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal