为什么GET方法没有解码属性,以防url的属性有空格?

时间:2017-01-01 13:49:23

标签: php urlencode urldecode

好吧,我有两个链接, 当使用另一个页面中的两个链接时,第一个链接由GET方法自动解码,第二个链接没有。 问题是如果任何属性中都有空格,则get不会自动解码URL,如果没有空格,则get会自动解码URL,这是正确的行为 提示:唯一的编码属性是 BodyStr ,并通过URLENCODE PHP函数进行编码。

另一个提示:两者之间的差异是 subjectStR属性

中的空格

我想知道为什么URL中的空格会阻止GET全局变量自动解码所有属性

  $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

1 个答案:

答案 0 :(得分:1)

URL查询字符串中不允许使用空格。如果您在SubjectStr中放置了未编码的空格,则URL会在该点结束,因此服务器永远不会看到BodyStr参数。

您需要对SubjectStr进行网址编码。将空格替换为+%20

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

它在太空停留的原因是因为HTTP协议。客户发送:

GET <url> HTTP/1.1

通过查找URL和HTTP版本令牌之间的空间来解析此请求行。如果URL中有空格,则会将其视为URL的末尾。