我是否必须 urldecode() 来自 GET 变量的 urlencoded URL?

Do I have to urldecode() a urlencoded URL from a GET variable?

如果我在 GET 变量中收到一个 url 编码的 URL,并从 PHP 文件中读取它,是否已经从脚本的角度对其进行了解码?

在我的本地机器上,这工作正常; URL 似乎已经被服务器解码,或者这只是 HTTP 协议。

正在做:

echo '<a href="' . $_GET['link'] . '">link</a>';

没有urldecode($_GET['link'])将输出一个有效的("decoded")link。

但是这个解决方案是否易于迁移且可靠?它取决于 PHP 版本还是 Apache 版本?

来自the documentation

The GET variables are passed through urldecode().

它们已经被解码了。你不应该再解码它们。


另一方面,您应该使用 htmlspecialchars 为 HTML 编码它们,因为回显 URL 输入直接进入页面会使您容易受到 XSS 攻击。