是否可以在PHP$\u GET vars中保留加号而不进行编码?

是否可以在PHP$\u GET vars中保留加号而不进行编码?,php,encoding,get,Php,Encoding,Get,假设我请求此URL: $\u GET['var']现在应该是“2+2”的地方是:“2” 显然,我可以在发送之前对数据进行编码,然后对其进行解码,但我想知道这是否是唯一的解决方案。我也可以用加号替换空格,但我也希望允许空格。我只是想要传递任何字符,而不需要任何url解码或编码。谢谢大家! 当然。您可以读出$\u SERVER[“QUERY\u STRING”],自己将其分解,然后放弃通常的URL解码,或者只将%xx占位符转换回来 preg_match_all('/(\w+)=([^&]+

假设我请求此URL:

$\u GET['var']现在应该是“2+2”的地方是:“2”


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

当然。您可以读出
$\u SERVER[“QUERY\u STRING”]
,自己将其分解,然后放弃通常的URL解码,或者只将
%xx
占位符转换回来

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

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

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

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

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

PHP Version 5.3.8
提交

回声:

使用以下代码:

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

执行此操作所需的几个步骤

  • 只需在url中将查询参数加号(+)替换为“%2B” 在请求url之前

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


我刚刚使用
urlencode()
对URL进行了良好的编码,并使用
urldecode($\u Get())
使字符串再次可用

你可以抓取
$\u SERVER[“QUERY\u STRING”]
-我想这会给你原始文本?你为什么不进行url编码?方法是对url进行编码,使其看起来像var=2%202(其中20是这样的数字,它将是表示符号+的实数)。php内置了解码功能!我不想编码的原因是,我想要更漂亮的URL。在我的网站上,URL位于URL中的。e、 g.看起来比(我试过了,但我可以让它工作-它破坏了mod_rewrite并由于某种原因导致错误)没有阻止对参数值进行URL解码的标志。我需要的数据实际上在$_服务器[“QUERY_STRING”]中,但解析它是个问题@webarto parse_str()将加号转换为空格。我发现一个黑客破解的解决方案,它使用preg_match和$_SERVER[“QUERY_STRING”]-谢谢此正则表达式不适用于像
foo variable=foo value&moo variable=moo value
这样的查询字符串,因为
\w
排除了
-
。这就是我所说的编码-我试图找到一个比所有那些%磅的符号更漂亮的解决方案,所以链接在传递时看起来更好。这实际上是错误的,因为发送
2%202
将得到相同的结果,而不是
2
2+2
<?php
echo urlencode($_GET['var']);
?>