是否可以在没有编码的情况下保留PHP $ _GET变量中的加号?

时间:2012-08-16 00:53:42

标签: php encoding get

说我请求此网址:

http://mydomain.com/script.php?var=2+2

$ _ GET ['var']现在是:“2 2”,它应该是“2 + 2”

显然我可以在发送之前对数据进行编码然后对其进行解码,但我想知道这是否是唯一的解决方案。我也可以用加号替换空格,但我也想要空格。我只想要传递任何字符,不进行任何url解码或编码。谢谢!

7 个答案:

答案 0 :(得分:5)

if(strpos($_SERVER["QUERY_STRING"], "+") !== false){
    $_SERVER["QUERY_STRING"] = str_replace("+", "%2B", $_SERVER["QUERY_STRING"]);
    parse_str($_SERVER["QUERY_STRING"], $_GET);
}

答案 1 :(得分:4)

当然。你可以读出$_SERVER["QUERY_STRING"],自己解析,然后放弃通常的URL解码,或者只转换%xx占位符。

preg_match_all('/(\w+)=([^&]+)/', $_SERVER["QUERY_STRING"], $pairs);
$_GET = array_combine($pairs[1], $pairs[2]);

(示例仅适用于字母数字参数,并且不执行上述的%xx解码。只需分解原始输入。)

答案 2 :(得分:2)

您可以使用urlencode,但这也可以将任何空格转换为加号。这是有道理的,因为URL中的+通常表示空格。如果你真的需要一个加号来表示加号,你应该逃避输入。这意味着+将成为%2B,您的网址将为http://mydomain.com/script.php?var=2%2B2

答案 3 :(得分:1)

在查询段中生成包含+的URL的人是错误的,除非他们打算表示空格字符。查询中的+是保留字符(re:RFC2396 §3.4)。如果您需要在查询字符串中插入文字+,则必须将其编码为%2B(re:RFC2396 §2.2)。

答案 4 :(得分:1)

执行此操作需要几个步骤。

  • 只需将您的查询参数加上(+)符号替换为'%2B'在网址中 在请求网址之前。

  • 现在您将只检索查询参数。它会 自动替换'%2B'加号。

答案 5 :(得分:0)

为了将来参考,您可以在获取请求中显示“+”符号,而无需提交带编码符号的网址。

PHP Version 5.3.8

提交http://mydomain.com/script.php?var=2+2

回声:

2+2

使用以下代码:

<?php
echo urlencode($_GET['var']);
?>

答案 6 :(得分:0)

我刚刚使用urlencode()对网址进行了良好编码,并urldecode($_Get())使字符串再次可用。