【问题标题】:How do I encode a : in a url?如何在 url 中对 : 进行编码?
【发布时间】:2016-11-29 08:35:49
【问题描述】:

我需要发送一个获取请求,其中 url 的最后一部分是一个 json 值。我已经对以下{"period":"600s"} 进行了编码,以便在多个不同的站点上使用,但是它们都得出了相同的结果,其中: 没有被解码。

编码后的网址:stickiness=%7B%22period%22%3A%22600s%22%7D

我在浏览器中输入的结果:

那么我该如何编码:

【问题讨论】:

    标签: urlencode url-encoding


    【解决方案1】:

    %3A :的编码。 : 在 URI 中保留用于指定端口号(例如,google.com:443 手动指定使用端口 443,默认为 HTTPS 端口)。如果你想在 URI 中包含 :,它必须是 precent-sign-encoded,这就是 %3A。无法在 URL 栏中对其进行解码,因为它会违反 : 字符的保留用途。

    【讨论】:

    • 那么这是否意味着我不能在 url 中有一个编码的:,或者只是它可以工作但它不会将: 显示为本身,而是作为编码字符?
    • 您只能拥有一个编码的: (%3A)。 “只是它会工作,但它不会显示 : 作为它本身,而是作为编码字符?”是的。
    • 好的,谢谢,我的请求没有按我预期的方式工作,我认为编码是原因。谢谢:)
    【解决方案2】:

    冒号字符在浏览器中没有被解码,因为它属于 the reserved characters,在其他地方的 URL 中已经具有明确的含义 - 在这种情况下,将协议与主机名和主机名后面的端口分开。

    相关标准为RFC 1738,第3页:

    许多 URL 方案保留某些字符以表示特殊含义: 它们在 URL 的特定于方案的部分中的外观具有 指定的语义。如果对应八位字节的字符是 在方案中保留,必须对八位字节进行编码。那些角色 ”;”, “/”、“?”、“:”、“@”、“=”和“&”是可能的字符 为方案中的特殊含义而保留。其他角色不得 在方案中保留。

    通常,当八位字节是 URL 时,URL 具有相同的解释 由一个字符表示以及它何时编码。然而,这并不是 保留字符为真:编码为 a 保留的字符 特定的方案可能会改变 URL 的语义。

    因此,只有字母数字、特殊字符“$-_.+!*'()”和 可以使用用于其保留目的的保留字符 在 URL 中未编码。

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 2013-04-02
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2011-04-13
      • 2014-03-27
      相关资源
      最近更新 更多