PHP $ _GET编码的param返回无效的字符

时间:2016-08-18 12:32:32

标签: urlencode

我遇到了一个我无法解决的奇怪问题,有人可以提出解决方案吗?提前谢谢你:)

我想将一个完整的url传递给脚本,脚本会检查网址并进行元刷新以重定向到它,所以假设我的脚本是 goto.php ,我希望它重定向到:

http://www.google.com/?name=david&param=gender

所以我在浏览器中输入:

www.mydomain.com/goto.php?u=http%3A%2F%2Fwww.google.com%2F%3Fname%3Ddavid%26param%3Dgender

但是我的goto.php脚本得到了:

http://www.google.com/?name=david¶m=gender

正如你所看到的,“&”错过了,这是我的goto.php的代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>checking</title>
<meta name="robots" content="noindex,nofollow" />
</head>
<body>
<?php echo $_GET ['u'];?>
</body>
</html>

虽然如果我添加

<meta http-equiv="refresh" content="0;url=<?php echo $_GET ['u'];?>" />

它适用于某些浏览器,但在其他浏览器中,它不起作用,因为$ _GET ['u']没有返回有效的URL。

再次感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

请更改

<?php echo $_GET['u']; ?>

到以下行

<?php echo urldecode($_GET['u']); ?>

答案 1 :(得分:0)

看起来您遇到charset编码/解码问题。什么是你的&#34; php -i&#34;?

的输出

修改

我刚试了一次,你的脚本很好。问题是您的网址未针对HTML进行转义。如果您查看页面的来源,那么您会发现一切都很好。

在输出到HTML之前,您必须转义所有&符号(&amp;)。使用htmlspecialchars()或htmlentities()。

http://php.net/manual/en/function.htmlspecialchars.php

<?php echo htmlspecialchars($_GET['u']); ?>