PHP $_GET 编码参数 return 无效字符
PHP $_GET encoded param return invalid chars
我遇到了一个我无法解决的非常奇怪的问题,任何人都可以提出解决方案吗?提前谢谢你:)
我想将完整的 url 传递给脚本,脚本将检查 url 并进行元刷新以重定向到它,因此假设我的脚本是 goto.php 我希望它重定向到:
http://www.google.com/?name=david¶m=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']); ?>
我遇到了一个我无法解决的非常奇怪的问题,任何人都可以提出解决方案吗?提前谢谢你:)
我想将完整的 url 传递给脚本,脚本将检查 url 并进行元刷新以重定向到它,因此假设我的脚本是 goto.php 我希望它重定向到:
http://www.google.com/?name=david¶m=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']); ?>