PHP $_GET 编码参数 return 无效字符

PHP $_GET encoded param return invalid chars

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

我想将完整的 url 传递给脚本,脚本将检查 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'] 不是 return 有效的 url。

再次感谢您的任何建议。

请换行

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

到下一行

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

您的字符集 encoding/decoding 似乎有问题。你的 "php -i" 的输出是什么?

编辑

我刚刚又试了一次,你的脚本没问题。问题是您的 URL 没有为 HTML 转义。如果您查看页面的源代码,那么您会发现一切看起来都很好。

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

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

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