0

urlencode在传递给 URL 之前我已经完成了变量

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

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

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

它只打印F。如何解决这个问题?

4

5 回答 5

3

I doubt that $_GET['alias'] exists when requesting a URL with the query aliasF%26B. It’s rather $_GET['aliasF&B'] that’s getting populated.

In this case you need to use $_SERVER['QUERY_STRING'] to get the full query.

于 2010-03-17T18:41:57.817 回答
1

It looks like you are not using the query string "correctly." It should be in key=value pairs. I would look at using $_SERVER['QUERY_STRING'] to get your information instead.

于 2010-03-17T18:43:08.760 回答
1

You don't need to urlencode the pair. You only need to urlencode name and a value as such:

Wrong:

urlencode('aliasF=B')

Correct:

urlencode('aliasF') . '=' . urlencode('B')
于 2010-03-17T18:44:41.117 回答
1

AFAIK$_GET已经解码。

php.net

超全局变量 $_GET 和 $_REQUEST 已经解码。在 $_GET 或 $_REQUEST 中的元素上使用 urldecode() 可能会产生意想不到的危险结果。

于 2010-03-17T18:46:10.047 回答
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()用户按下的 url 或脚本正在跟踪。

于 2013-09-18T21:59:51.953 回答