在传递给网址
之前,我已完成变量的urlencode
http://example.com/Restaurants?alias=F%26B
但是当我尝试在页面中打印时
$alias = rawurldecode($_GET['alias']);
echo $alias;
仅打印F
。怎么解决这个问题?
答案 0 :(得分:3)
我在使用查询$_GET['alias']
请求网址时怀疑aliasF%26B
是否存在。相当$_GET['aliasF&B']
正在填充。
在这种情况下,您需要使用$_SERVER['QUERY_STRING']
来获取完整查询。
答案 1 :(得分:1)
看起来您没有正确使用查询字符串。它应该是key=value
对。我会考虑使用$_SERVER['QUERY_STRING']
来获取您的信息。
答案 2 :(得分:1)
您不需要对该对进行urlencode。您只需要urlencode名称和值:
错:
urlencode('aliasF=B')
正确:
urlencode('aliasF') . '=' . urlencode('B')
答案 3 :(得分:1)
AFAIK $_GET
已经解码。
请参阅php.net
superglobals $ _GET和$ _REQUEST 已被解码。使用urldecode() 在$ _GET或$ _REQUEST中的元素上 可能有意想不到的危险 结果
答案 4 :(得分:0)
可以通过使用特定于您情况的不同编码系统来解决此问题:
function encode($string)
{
$result = str_replace("|","||",$string);
return str_replace("&","|20",$result);
}
function decode($string)
{
$result = str_replace("|20","&",$string);
return str_replace("||","|",$result);
}
这将基本上使用'|'创建一个单独的转义系统字符。该字符可以是您通常不使用的任何字符,也不是字段分隔符。
在这里,Apache不会将URL转换为不同的内容,从而使转换无效。浏览器也不会改变它。
请注意,您将decode($_GET['alias'])
和encode()
用户按下或脚本正在关注的网址。