在$ _GET变量中放置空格有什么问题

时间:2011-06-15 21:45:22

标签: php get space spaces

例如,如果我的网址看起来像index.php?category = IT%20&%20Soft。然后我尝试打印“$ _GET [category]”我只得到“IT”而不是“IT& Soft”。这有什么不对?这让我很沮丧。

4 个答案:

答案 0 :(得分:16)

问题不在于空格,而在于&符号。

改为使用%26,如下所示:

index.php?category=IT%20%26%20Soft

&符号表示您正在开始另一个字段(如category=IT&subcategory=somethingelse)。您可以看到list of reserved characters on Wikipedia

答案 1 :(得分:3)

空格和&符号(&)无效,需要编码才能在参数值中使用。通过'urlencode'运行您的参数以创建url安全参数值。

http://php.net/manual/en/function.urlencode.php

答案 2 :(得分:3)

&是HTTP URL和URI中的保留字符(通常称为链接或超文本引用)。这个&就是定义新$_GET条目的那一点。所以它不再是之前$_GET条目的一部分。前一个是您想要使用的那个。事实上,类别中的&是导致您头痛的原因:

URL: http://example.com/script.php?hello=world&foo=bar
                                  ^          ^^^ 
PHP:
  $_GET['hello'] // "world"
  $_GET['foo']   // "bar"

所以请记住:在URL中,&字符将一个URL参数与另一个URL参数分开。

但这并不意味着您的问题无法解决。您可以通过URL参数传递包含&字符的值。有一种非常简单的方法可以将&个字符转换为特定的$_GET值。

Internet往返的打包值

但请注意:您现在可能会在应用程序的输入级别(即数据进入$_GET和其他变量的部分)中查看。但要解决这个问题,您需要查看相反的结果 - 输出级别(您发送HTML的位置)。

为什么呢?因为输出将成为脚本的输入。因此,如果输出已经错误,输入就永远无法使用。

请考虑应用程序发送到浏览器的每个URL(例如,作为HTML链接<a href="">的一部分)是一个新命令,其中包含脚本$_GET变量的特定参数。从技术上讲,这部分称为query或HTTP URI / URL的queryinfo部分。

因此,如果URL的构建方式会为您的脚本创建错误的$_GET参数,那么它已经太晚了。所以你看一下输出来解决原因。

相反,您需要查看创建网址的位置并在那里执行正确的输出,以便稍后获取$_GET['category']

在每个链接输出位置,您需要确保每个值都正确编码。这是包含问题解决方案的神奇词汇。一个术语,你最好在字典中查找,而不是在技术文档中查找。

$_GET参数所需值的编码类型就是所谓的网址编码 - 网址编码 - 有意义,对吧? URL,encoding = URL-encoding。

对URL的值进行编码实际上需要注意的是,参数的值将在您的脚本中再次安全地使用,而不是分开值,最后甚至在技术上破坏URL。

听起来可能有点复杂,但好消息是,您首先只需要知道PHP作为一种网络脚本语言提供了一种为您执行此编码的功能。它被称为urlencode(),您可以在任何值上使用它来创建您的网址。事实上,在Web应用程序中执行这是一项非常常见的任务,所以如果您之前只知道 - 但在那之前,让我们看一些代码吧?

使用PHP编码URL参数

我必须猜测一下你的结果如何,但是你可以将你的代码添加到你的问题(输出代码)中,这样你就可以更容易地给你一些你可以“使用”的代码。假设您有类似的内容输出链接:

<a href="index.php?category=<?php echo $category ?>">

这将输出$category只是的内容,因为它是。但这确实会导致错误的网址破坏您的脚本。

因此,需要对$category的值进行编码。这就像将它放入信封中以确保它作为一个整体到达它的目的地。让我们使用我刚刚提到的urlencode函数来做到这一点:

<a href="index.php?category=<?php echo urlencode($category) ?>">

如您所见,只需将值放入urlencode函数即可正确编码数据。准备到达它的目的地,没有什么可以打破它。

一如既往:当你知道如何时,这很简单。需要正确编写URL,特别是需要对参数值进行适当编码,以防止在另一端遇到问题:输入级别。

祝你好运。

答案 3 :(得分:1)

查询字符串使用&字符作为分隔符来分隔参数。基本上你需要将它转移到%26

index.php?category=IT%20%26%20Soft