我正在阅读有关
的网址的RFC2396许多URI包含由某些组成或由其分隔的组件 特殊字符。这些字符称为“保留”,因为 它们在URI组件中的使用仅限于它们的保留 目的
但是关于url的查询部分(在?和#之间)的部分是
3.4。查询组件 查询组件是要解释的信息字符串 资源。
query = *uric
在查询组件中,字符“;”,“/”,“?”,“:”,“@”, “&”,“=”,“+”,“,”和“$”是保留的。
每个字符的“保留目的是什么?我理解查询中使用了什么&,=和+,但其他字符呢?
更实际的是,我是否应该在查询中对这些字符进行url编码?我见过的浏览器和服务器处理:和;和其他没有编码的字符
答案 0 :(得分:5)
我认为RFC 3986的第2.2节废除了RFC 2396,它有一个 可能的解释。我引用:
这些字符被称为“保留”,因为它们可能(或可能不是) 通过通用语法,每个特定于方案的语法定义为分隔符,或 通过URI的解除引用算法的特定于实现的语法。
我认为伯纳斯 - 李等人。试图到达这里是即使 并非所有保留字符都用于描述的通用语法中 RFC,作者希望为将来的方案留下足够的自由度 实现特定的代码,以便能够使用他们看到的那些字符 配合。
至于你是否应该对这些角色进行编码,我认为你应该这样做 研究并使用符合标准的Percent-Encoding Algorithm 而不是使用非标准的或尝试自己滚动。例如,如果你 正在使用像C#或Python这样的语言,然后是那些附带的库 语言包括符合标准的算法实现。更多 详情,RFC 3986的第2.4节涵盖了编码或解码的时间。