是否可以在PHP$\u GET vars中保留加号而不进行编码?
假设我请求此URL: $\u GET['var']现在应该是“2+2”的地方是:“2”是否可以在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 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']);
?>