【问题标题】:Why do you need to encode URLs?为什么需要对 URL 进行编码?
【发布时间】:2011-01-10 07:09:32
【问题描述】:

为什么需要对 url 进行编码?是否有充分的理由必须将 GET 数据中的每个空格都更改为 %20

【问题讨论】:

  • 一个很好的理由是,在印刷材料中最好使用%20,这样一些机构就可以输入它而无需猜测空格的数量!

标签: url


【解决方案1】:

来自RFC 2936,第 2.4.3 节:

空格字符被排除在外 因为重要的空间可能 消失,微不足道的空间可能 在转录 URI 时引入 或排版或受到 文字处理的处理 程式。空白也用于 在许多情况下分隔 URI。

【讨论】:

  • 无法比 RFC 更精确
  • 换句话说,“不,没有内在的技术原因,但我们知道实施者和用户都很草率。”这可能是正确的决定,主要是因为用户很难保持适当的空间。
  • @Matthew - 有内在的技术原因,请参阅我的回答
  • @Rippo:您的回答声称它们“不安全”,但没有给出任何技术原因。
  • @Matthew - 根据我的经验,不安全意味着一定有技术原因......
【解决方案2】:

您这样做是因为每个不同的浏览器都知道构成 URL 的字符串是如何编码的。将空间转换为 %20 等使该 URL/URI 可移植。它可以是 latin-1,也可以是 unicode。它需要规范化为普遍理解的东西。看看rfc3986https://www.rfc-editor.org/rfc/rfc3986#section-2.1

【讨论】:

  • 更改字节的表示不指定编码。至少不是字面意思。
【解决方案3】:

因为有些字符有特殊含义。

例如,在查询字符串中,与号 (&) 用作键值对之间的分隔符。如果您将 & 符号放入其中一个值中,它看起来就像一个值的结尾和下一个键的开头之间的分隔符。所以对于像这样的特殊字符,我们使用百分比编码,这样我们就可以确保数据是明确编码的。

【讨论】:

  • 但是,假设您可以将& 编码为%26。你仍然可以有一个包含像100%26=22 这样的字符串的值。它仍然看起来像 key-val 对之间的分隔符,不是吗??
  • 不行,因为%是具有特殊含义的字符之一,所以也必须编码(如%25)。如果您有字符串值%26,那么它将在 URL 中显示为%2526,因为% 将被编码。要获取字符串值,您需要将%25 解码为%,留下字符串%26
【解决方案4】:
  • 最初的旧浏览器可能会被空格弄糊涂(不再是真正的问题)。
  • 现在,如果有人复制 url 以作为链接发送 - 空格会破坏超链接 - 即

嘿!看看这只弹钢琴的笨猫!

http://www.mysite.com/?video=funny cat plays piano.

看看链接是如何断开的?

现在看看这个:

http://www.mysite.com/?video=funny%20cat%20plays%20piano.

【讨论】:

    【解决方案5】:

    让我们分解您的问题。
    为什么需要对 URL 进行编码?
    URL 仅由有限数量的字符组成,包括数字 (0-9)、字母 (AZ、az) 和一些特殊字符(“-”、“.”、“_”、“~”) .
    这是否意味着我们不能使用任何其他字符?
    这个问题的答案是“是”。但请稍等,有一个 hack 是 URL EncodingPerchantage Encoding。因此,如果您要传输任何不属于上述成员的字符(数字、字母和特殊字符),那么我们需要对它们进行编码。这就是为什么我们需要将“空格”编码为“%20”。
    好的?这对于 URL 编码是否足够?不,这还不够,有很多关于 URL 编码的内容,但在这里,我不会让它成为一个相当大的、无聊的技术答案。但是如果你想了解更多,那么你可以从这里阅读:https://www.urlencoder.io/learn/(感谢作者)

    【讨论】:

    • 初学者理解的最佳答案
    • @Coder123 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2014-07-14
    • 2019-02-12
    相关资源
    最近更新 更多