1

我正在尝试编写一个对 URI 进行编码的函数,以使它们符合rfc 3986

即检查除字母以外的每个字符;/?:@&=+$-_.!~*'()|\^[]``#被取代%[hex octet]

我想确保如果使用已经编码的 URI 调用函数,代码不会破坏它。

到目前为止,我所做的只是寻找一个 '%' 符号,后跟 2 个八位字节字符。我发现我替换的任何其他保留字符。

我还应该做其他检查吗?

不要介意安全问题;他们正在其他地方处理。

4

2 回答 2

1

我认为正确编码的 URI 应该总是第二次干净地通过。

原因是无论如何您都必须正确解析 URI,因为/ @ . : ? & =在 URI 中包含字符是完全合法的,只要它们出现在正确的位置即可。

因此,只有在 URI 的该部分不合法时才对字符进行编码。有了这个断言,你就可以创建一个在每个位置都是合法的编码字符串,所以当你解析它时,就没有什么可以编码的了。

请记住,如果有人向您抛出要编码的 URI,并且它恰好是模棱两可的(,它包含改变 URI 语法的特殊字符),他们就不能期望得到正确的结果。

为了更直接地回答您的问题,我会说是的:鉴于上述所有情况,您只需要对%转义序列进行特殊处理。

于 2012-10-10T01:48:29.373 回答
0

嗯,你怎么知道已经编码的 URI 不应该再次编码?也许URI包含,我不知道,如何编码URI的例子,如果不会被第二次编码,那么解码会破坏它?

也就是说,您可以检查是否只%存在允许的字符加号,以及是否每个字符都%后跟一个十六进制数字。如果是,则很有可能(但不能保证)编码已经完成。

于 2012-10-10T01:36:17.027 回答