【发布时间】:2011-01-10 07:09:32
【问题描述】:
为什么需要对 url 进行编码?是否有充分的理由必须将 GET 数据中的每个空格都更改为 %20?
【问题讨论】:
-
一个很好的理由是,在印刷材料中最好使用
%20,这样一些机构就可以输入它而无需猜测空格的数量!
标签: url
为什么需要对 url 进行编码?是否有充分的理由必须将 GET 数据中的每个空格都更改为 %20?
【问题讨论】:
%20,这样一些机构就可以输入它而无需猜测空格的数量!
标签: url
来自RFC 2936,第 2.4.3 节:
空格字符被排除在外 因为重要的空间可能 消失,微不足道的空间可能 在转录 URI 时引入 或排版或受到 文字处理的处理 程式。空白也用于 在许多情况下分隔 URI。
【讨论】:
您这样做是因为每个不同的浏览器都知道构成 URL 的字符串是如何编码的。将空间转换为 %20 等使该 URL/URI 可移植。它可以是 latin-1,也可以是 unicode。它需要规范化为普遍理解的东西。看看rfc3986https://www.rfc-editor.org/rfc/rfc3986#section-2.1
【讨论】:
因为有些字符有特殊含义。
例如,在查询字符串中,与号 (&) 用作键值对之间的分隔符。如果您将 & 符号放入其中一个值中,它看起来就像一个值的结尾和下一个键的开头之间的分隔符。所以对于像这样的特殊字符,我们使用百分比编码,这样我们就可以确保数据是明确编码的。
【讨论】:
& 编码为%26。你仍然可以有一个包含像100%26=22 这样的字符串的值。它仍然看起来像 key-val 对之间的分隔符,不是吗??
%是具有特殊含义的字符之一,所以也必须编码(如%25)。如果您有字符串值%26,那么它将在 URL 中显示为%2526,因为% 将被编码。要获取字符串值,您需要将%25 解码为%,留下字符串%26。
嘿!看看这只弹钢琴的笨猫!
http://www.mysite.com/?video=funny cat plays piano.
看看链接是如何断开的?
现在看看这个:
http://www.mysite.com/?video=funny%20cat%20plays%20piano.
【讨论】:
让我们分解您的问题。
为什么需要对 URL 进行编码?
URL 仅由有限数量的字符组成,包括数字 (0-9)、字母 (AZ、az) 和一些特殊字符(“-”、“.”、“_”、“~”) .
这是否意味着我们不能使用任何其他字符?
这个问题的答案是“是”。但请稍等,有一个 hack 是 URL Encoding 或 Perchantage Encoding。因此,如果您要传输任何不属于上述成员的字符(数字、字母和特殊字符),那么我们需要对它们进行编码。这就是为什么我们需要将“空格”编码为“%20”。
好的?这对于 URL 编码是否足够?不,这还不够,有很多关于 URL 编码的内容,但在这里,我不会让它成为一个相当大的、无聊的技术答案。但是如果你想了解更多,那么你可以从这里阅读:https://www.urlencoder.io/learn/(感谢作者)
【讨论】: