我有这样的网址:
abc.com/my+string
当我获得参数时,显然它会用空格替换+
,所以我得到my string
我用+
替换了网址中的%2B
,然后我使用了rawurldecode()
,但结果是一样的。尝试使用urldecode()
,但我仍然无法在我的变量中获得plus sign
,它始终是一个空白区域。
我错过了哪些内容,如何从网址my+string
获取PHP中的abc.com/my%2Bstring
?
谢谢
答案 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的值,并按照这样的方式得到它:
/
另请阅读以下文档:rawurldecode和Example here。