urlencode
在传递给 URL 之前我已经完成了变量
http://example.com/Restaurants?alias=F%26B
但是当我尝试在页面中打印时
$alias = rawurldecode($_GET['alias']);
echo $alias;
它只打印F
。如何解决这个问题?
urlencode
在传递给 URL 之前我已经完成了变量
http://example.com/Restaurants?alias=F%26B
但是当我尝试在页面中打印时
$alias = rawurldecode($_GET['alias']);
echo $alias;
它只打印F
。如何解决这个问题?
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.
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.
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')
AFAIK$_GET
已经解码。
超全局变量 $_GET 和 $_REQUEST 已经解码。在 $_GET 或 $_REQUEST 中的元素上使用 urldecode() 可能会产生意想不到的危险结果。
可以通过针对您的情况使用不同的编码系统来解决此问题:
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 或脚本正在跟踪。