说我请求此网址:
http://mydomain.com/script.php?var=2+2
$ _ GET ['var']现在是:“2 2”,它应该是“2 + 2”
显然我可以在发送之前对数据进行编码然后对其进行解码,但我想知道这是否是唯一的解决方案。我也可以用加号替换空格,但我也想要空格。我只想要传递任何字符,不进行任何url解码或编码。谢谢!
答案 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())
使字符串再次可用。