【问题标题】:Valid URL separators有效的 URL 分隔符
【发布时间】:2010-10-05 20:29:49
【问题描述】:

我有一个包含多个值的长 URL。

示例 1:

http://www.domain.com/list?seach_type[]=0&search_period[]=1&search_min=3000&search_max=21000&search_area=6855%3B7470%3B7700%3B7730%3B7741%3B7742%3B7752%3B7755%3B7760%3B7770%3B7800%3B7840%3B7850%3B7860%3B7870%3B7884%3B7900%3B7950%3B7960%3B7970%3B7980%3B7990%3B8620%3B8643%3B8800%3B8830%3B8831%3B8832%3B8840%3B8850%3B8860%3B8881%3B9620%3B9631%3B9632

我的变量搜索区域仅包含 4 个数字(例如 4000、5000),但可以包含很多数字。现在我使用; 作为分隔符在 URL 中分隔这些。尽管如示例 1 所示, ;转换为%3B。这让我相信这是一个不好用的符号。

最好的 URL 分隔符是什么?

【问题讨论】:

标签: url separator


【解决方案1】:

好吧,根据RFC1738,有效的URL可能只包含字母a-z,加号(+),句点和连字符 (-)。

一般来说,我会加上一个加号来分隔您的搜索区域。所以你的网址会变成http://www.domain.com/list?seach_type=0&search_period=1&search_min=3000&search_max=21000&search_area=6855+7470+7700+...

--编辑--

正如 GinoA 指出的那样,我误读了该文件。因此“$-_.+!*'(),”也是有效字符。不过,我仍然会使用 + 号。

【讨论】:

    【解决方案2】:

    Moontear,我想你误读了linked document。该限制仅适用于 URL 的“方案”部分。对于 WWW URL,即“http”。

    文档的下一部分继续说:

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

    我个人会使用逗号 (,)。但是,加号 (+) 和破折号 (-) 也是合理的选择。

    顺便说一句,该文档还提到在某些方案中保留了分号 (;)。

    【讨论】:

    • @You:我不同意反对意见。这不仅仅是一个评论,也是一个有效的答案,比我的更明确。尤其是最后两段。
    • @MainMa:有点正确。如果我是 GinoA,我会改写它;就像现在一样,这是一个回复——那些属于 cmets。
    • Chrome 在地址栏中将 ' 字符转义为 %27。
    【解决方案3】:

    如果只有数字要分隔,您可以选择多种分隔符。例如,您可以选择任何字母。

    空间可能是一个不错的选择。它将在 URL 中转换为+ 字符,因此比字母更具可读性。

    示例:search_area=4000+5000+6000

    【讨论】:

      【解决方案4】:

      我迟到了,但是一个有效的查询字符串可以重复变量,所以而不是......

      http://x.y.z/list?type=0&period=1&min=3000&max=21000&area=6855+7470+7700
      

      ...你也可以使用...

      http://x.y.z/list?type=0&period=1&min=3000&max=21000&area=6855&area=7470&area=7700
      

      【讨论】:

      • 大多数网络框架开箱即用地处理这个问题,搜索区域元素会自动解析为列表。
      【解决方案5】:
      当内容类型为 application/x-www-form-urlencoded(HTML 表单的标准)时,

      “+”将被解释为空格“”。这可能由您的服务器软件处理。

      我更喜欢“!”。它没有对 URL 进行编码(至少在 Chrome 中没有),并且在典型情况下保留“+”作为真正的空格字符。

      【讨论】:

      • 只是想指出(事实发生 4.5 年后)Chrome(v70.0.3538.77(官方版本)(至少 64 位)现在将 ! 编码为 %21
      • 该!百分比编码后变为 %21。我认为这个问题不包括任何特定于客户端的机制,而是可能需要在分隔符中完成的编码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多