10

假设我请求此 URL:

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

$_GET['var'] 现在将是:“2 2”,应该是“2+2”

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

4

7 回答 7

8
if(strpos($_SERVER["QUERY_STRING"], "+") !== false){
    $_SERVER["QUERY_STRING"] = str_replace("+", "%2B", $_SERVER["QUERY_STRING"]);
    parse_str($_SERVER["QUERY_STRING"], $_GET);
}
于 2012-12-28T13:19:09.530 回答
6

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

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

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

于 2012-08-16T00:56:34.893 回答
3

您可以使用urlencode,尽管这也会将任何空格转换为加号。这是有道理的,因为+URL 中的 a 通常代表一个空格。如果您确实需要一个加号来表示加号,您可能应该转义输入。这意味着 a+将成为%2B,您的 URL 将是http://mydomain.com/script.php?var=2%2B2

于 2012-08-16T01:00:58.017 回答
1

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

于 2012-08-16T01:11:37.113 回答
1

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

PHP Version 5.3.8

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

回声:

2+2

使用以下代码:

<?php
echo urlencode($_GET['var']);
?>
于 2013-10-17T08:04:59.247 回答
1

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

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

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

于 2015-11-28T20:22:30.903 回答
0

我只是习惯urlencode()了——嗯——对 URL 进行编码urldecode($_Get())并使字符串再次可用。

于 2017-12-04T07:31:08.297 回答