传递与传播在urlencode的帮助下在URL变量中

时间:2010-03-17 18:31:23

标签: php url url-encoding

在传递给网址

之前,我已完成变量的urlencode

http://example.com/Restaurants?alias=F%26B

但是当我尝试在页面中打印时

 $alias =  rawurldecode($_GET['alias']);
 echo $alias;

仅打印F。怎么解决这个问题?

5 个答案:

答案 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()用户按下或脚本正在关注的网址。