PHP:rawurldecode()没有显示加号

时间:2018-01-31 12:38:36

标签: php urldecode

我有这样的网址:

abc.com/my+string

当我获得参数时,显然它会用空格替换+,所以我得到my string

我用+替换了网址中的%2B,然后我使用了rawurldecode(),但结果是一样的。尝试使用urldecode(),但我仍然无法在我的变量中获得plus sign,它始终是一个空白区域。

我错过了哪些内容,如何从网址my+string获取PHP中的abc.com/my%2Bstring

谢谢

2 个答案:

答案 0 :(得分:2)

通常,您不需要手动对GET参数值进行URL解码,因为PHP已经自动为您执行此操作。 abc.com?var=my%2Bstring - > $_GET['var']将包含my+string

这里的问题是URL重写正在发挥作用。正如http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_b所解释的那样,

  

mod_rewrite必须在映射URL之前对其进行unescape,因此在应用它们时,反向引用将不会被转义。

因此mod_rewrite已将my%2Bstring解码为my+string,当您将其重写为查询字符串参数时,您实际获得?var=my+string。当PHP在 值上应用自动URL解码时,+将成为一个简单的空间。

存在[B]标志,以使mod_rewrite再次重新编码该值。

答案 1 :(得分:1)

像这样:

echo urldecode("abc.com/my%2Bstring");      // => abc.com/my+string
echo PHP_EOL;
echo rawurldecode("abc.com/my%2Bstring");   // => abc.com/my+string

此外,如果你想获得实际的my+string,你可以利用PHP自带的parse_url函数的功能,尽管你必须提供一个完整的URL。

其他方式只是explode urldecode的值,并按照这样的方式得到它:

/

另请阅读以下文档:rawurldecodeExample here

this resource