有效的URL分隔符

24

我有一个包含多个值的长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

我的变量 "search area" 中只包含4位数字(例如4000,5000),但可能会包含很多这样的数字。目前我使用分号 ; 作为分隔符将它们分开放在URL中。但是如示例1所示,";" 被转换成了 %3B 。这让我相信这是一个不好的符号。

什么是最好的URL分隔符?


请注意,这是一个非常好的URL编码/解码测试工具:http://meyerweb.com/eric/tools/dencoder/ - Jon Onstott
5个回答

43

Moontear,我认为你错误地理解了链接的文件。该限制仅适用于URL的“scheme”部分。在WWW URL的情况下,这是“http”。

文档的下一节继续说:

因此,在URL中只能使用字母数字字符、特殊字符"$-_.+!*'()"以及用于其保留目的的保留字符而不需要进行编码。

我个人喜欢使用逗号(,)。但加号(+)和破折号(-)也都是可以接受的选项。

顺便提一下,该文档还提到分号(;)在某些方案中是被保留的。


9
我不同意这个回答被踩。它不仅仅是一个评论,而且比我的回答更明确,是一个有效的答案,尤其是最后两段。 - Arseni Mourzenko
1
@MainMa:有点道理。如果我是GinoA,我会重新表述一下;现在这样,它是一个回复——而那些应该放在评论中。 - You
1
Chrome在地址栏中将'字符转义为%27。 - vladimir83

14

不确定您在这里所说的“有效”是什么意思。%20用于URL编码空格。 - OneCricketeer
1
你回复了一个2010年的答案?你是怎么找到它的 :-) 我已经添加了缺失的未编码部分。 - Dennis G

5
如果只有数字需要分隔,您可以选择多种分隔符。例如,您可以选择任何一个字母。
可能空格是一个不错的选择。它将被转换为 URL 中的加号字符(+),因此比字母更易读。
例如:search_area=4000+5000+6000

2

我来晚了,但是有效的查询字符串可以重复变量,所以不需要...

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

大多数网络框架都可以直接处理这个问题,搜索区域的元素会自动被解析成列表。 - viam0Zah

1
当内容类型为application/x-www-form-urlencoded(HTML表单的标准格式)时,“+”应被解释为一个空格“ ”。这可能由您的服务器软件处理。
我更喜欢“!”。它不会被URL编码(至少在Chrome中不会),并将"+"保留用作通常情况下实际的空格字符。

1
只是想指出(事实发生4.5年后),Chrome(至少在v70.0.3538.77(官方版本)(64位)中)现在将编码为%21 - Kingsley
在百分号编码后面加上感叹号(!)会变成%21。 我认为这个问题没有包括任何特定于客户端的机制,但可能需要在分隔符中进行编码。 - Sakis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接