2017-01-01 3 views
-1

aimablement J'ai deux liens, lors de l'utilisation des deux liens dans une autre page, le premier lien est décodé automatiquement par la méthode GET et la seconde n'a pas. le problème est que s'il y a un espace dans un attribut, le get ne décode pas automatiquement l'URL et s'il n'y a pas d'espaces, le décoder automatiquement l'URL qui est le comportement correct tip: le seul attribut encodé est BodyStr et encodé via la fonction PHP URLENCODE.pourquoi la méthode GET n'a pas décodé les attributs dans le cas où les attributs de l'URL ont des espaces?

Une autre astuce: la différence entre les deux est l'espace dans SubjectStr Attribut

Je veux savoir pourquoi des espaces dans l'URL empêchent GET variable globale de décodage automatiquement tous les attributs

$message=urlencode($message); 
     http://localhost/test4.php?me=ahmed&y=1&clientid=55&default=1&Subjectstr=**Email From Contactuspage`**&BodyStr=$message 

     http://localhost/test4.php?me=ahmed&y= 

1&clientid=55&default=1&Subjectstr=**EmailFromContactuspage**&BodyStr=$message 
+0

Alors, pourquoi Subjectstr n'est-il pas également encodé? –

+0

je sais qu'il doit être codé, mais je savais que 8 heures de dépannage, donc je veux savoir exactement pourquoi les espaces dans url empêchent la méthode de décoder automatiquement – mina

+0

je l'ai écrit plus haut, cet attribut BodyStr est encodé via la fonction urlencode – mina

Répondre

1

L'espace n'est pas autorisé dans les chaînes de requête d'URL. Si vous placez un espace non codé dans SubjectStr, l'URL se termine à ce stade, de sorte que le serveur ne voit jamais le paramètre BodyStr. Vous devez encoder l'URL SubjectStr. Remplacez les espaces par + ou %20.

$message=urlencode($message); 
$url = "http://localhost/test4.php?me=ahmed&y=1&clientid=55&default=1&Subjectstr=Email+From+Contactuspage&BodyStr=$message" 

La raison pour laquelle il s'arrête à l'espace est due au protocole HTTP. Le client envoie:

GET <url> HTTP/1.1 

Cette ligne de demande est analysée par la recherche de l'espace entre l'URL et le jeton de version HTTP. S'il y a un espace dans l'URL, cela sera traité comme la fin de l'URL.

+0

le serveur a vu le reste du lien, et si vous voulez montrer cela, je peux notez le résultat de l'impression Obtenir les attributs de méthode – mina

+0

votre première partie de réponse est correcte, mais vous n'avez pas mentionné pourquoi GET a arrêté de décoder l'URL à l'attribut qui a des espaces – mina

+0

J'ai ajouté une explication basée sur le protocole HTTP. – Barmar