【问题标题】:Why should I urlencode URLs passed via GET为什么我应该对通过 GET 传递的 URL 进行 urlencode
【发布时间】:2012-10-03 15:56:10
【问题描述】:
假设我这样做
http://site.com/something?url=http://lol.com/lol
这样做有什么好处(例如安全性等)
'http://site.com/something?url=' . urlencode('http://lol.com/lol');
而不是仅仅传入一个未编码版本的 url 吗?为什么我应该对通过 GET 传递的东西进行 urlencode 编码,而不是仅仅传递未编码的版本(当然,如果 url 参数中有 & 或 ? 或 = ,那么我肯定应该对其进行编码......但假设他们没有,为什么应该我对它们进行编码)
【问题讨论】:
标签:
php
html
url
get
urlencode
【解决方案1】:
URL 中有一些具有特殊含义的字符。如果您在未编码的情况下传递这些字符,则这些字符在外部 URL(而不是它们所属的内部 URL)中将具有特殊含义。
例如,如果你想通过
http://example.com/foo?1=2&3=4
而且你不对其进行编码,那么你会得到:
http://example.com/?url=http://example.com/foo?1=2&3=4
与
url is http://example.com/foo?1=2
3 is 4
假设它们没有,我为什么要编码它们
因为你必须查看你传递的每个 URL 来决定它是否需要编码。
总是编码更简单,更不容易出错,然后根据具体情况进行决定。
【解决方案2】:
只要我知道第二个示例非常好,如果您有可能在您的网址中使用 unicode 字符。