假设我请求此 URL:
http://mydomain.com/script.php?var=2+2
$_GET['var'] 现在将是:“2 2”,应该是“2+2”
显然我可以在发送之前对数据进行编码然后对其进行解码,但我想知道这是否是唯一的解决方案。我也可以用加号替换空格,但我也想允许空格。我只是想要传递任何字符,而不需要进行任何 url 解码或编码。谢谢!
假设我请求此 URL:
http://mydomain.com/script.php?var=2+2
$_GET['var'] 现在将是:“2 2”,应该是“2+2”
显然我可以在发送之前对数据进行编码然后对其进行解码,但我想知道这是否是唯一的解决方案。我也可以用加号替换空格,但我也想允许空格。我只是想要传递任何字符,而不需要进行任何 url 解码或编码。谢谢!
if(strpos($_SERVER["QUERY_STRING"], "+") !== false){
$_SERVER["QUERY_STRING"] = str_replace("+", "%2B", $_SERVER["QUERY_STRING"]);
parse_str($_SERVER["QUERY_STRING"], $_GET);
}
当然。你可以读出$_SERVER["QUERY_STRING"]
,自己分解,然后放弃通常的 URL 解码,或者只转换%xx
占位符。
preg_match_all('/(\w+)=([^&]+)/', $_SERVER["QUERY_STRING"], $pairs);
$_GET = array_combine($pairs[1], $pairs[2]);
(示例仅适用于字母数字参数,不进行上述 %xx 解码。只是分解原始输入。)
您可以使用urlencode
,尽管这也会将任何空格转换为加号。这是有道理的,因为+
URL 中的 a 通常代表一个空格。如果您确实需要一个加号来表示加号,您可能应该转义输入。这意味着 a+
将成为%2B
,您的 URL 将是http://mydomain.com/script.php?var=2%2B2
。
在查询段中生成包含 a 的 URL 的+
人都是错误的,除非他们打算用它来表示空格字符。查询中的A+
是保留字符(re: RFC2396 §3.4)。如果您需要+
在查询字符串中插入文字,则必须将其编码为%2B
(re: RFC2396 §2.2)。
为了将来参考,您可以在获取请求中显示“+”符号,而无需提交带有编码符号的 url。
PHP Version 5.3.8
提交http://mydomain.com/script.php?var=2+2
回声:
2+2
使用以下代码:
<?php
echo urlencode($_GET['var']);
?>
执行此操作需要几个步骤。
只需在请求 url 之前将您的查询参数加号 (+) 替换为 url 中的 '%2B' 即可。
现在您将只检索查询参数。它将自动用加号替换“%2B”。
我只是习惯urlencode()
了——嗯——对 URL 进行编码urldecode($_Get())
并使字符串再次可用。