我正在尝试编写一个编码URI的函数,以使它们符合rfc 3986。
即。检查除了alphanum之外的每个角色; /?:@&=+$-_.!~*'()|\^[]``#
替换为%[hex octet]
我想确定如果使用已编码的URI调用该函数,代码将不会破坏它。
到目前为止,我所做的只是寻找一个'%'符号,然后是2个八位字符。我发现我替换的任何其他保留字符。
我应该做其他检查吗?
不介意安全问题;他们正在其他地方处理。
答案 0 :(得分:1)
我认为正确编码的URI应该总是第二次干净利落地通过。
原因是您无论如何都必须正确解析URI,因为在URI中使用/ @ . : ? & =
等字符是完全合法的,前提是它们出现在正确的位置。
所以你只编码一个字符,如果它在URI的那部分不合法。通过该断言,您可以创建一个在每个位置都合法的编码字符串,因此当您解析它时,没有任何内容可以编码。
请记住,如果某人向您抛出一个URI进行编码并且它恰好是不明确的(即它包含改变URI语法的特殊字符),他们就不能指望正确的结果。
为了更直接地回答你的问题,我会说是的:鉴于上述所有情况,你只需对%
转义序列进行特殊处理。
答案 1 :(得分:0)
也就是说,您可以检查是否只有允许的字符加上%
,以及每个%
后面是否都是十六进制数字。如果是,则很有可能(但不能保证)编码已经完成。