Url 防止对URI进行两次编码
我正在尝试编写一个函数来对URI进行编码,以使它们符合 即,检查除alphanum之外的每个字符<代码>/?:@&=+$-.!~*'()\^[]``被替换为Url 防止对URI进行两次编码,url,uri,Url,Uri,我正在尝试编写一个函数来对URI进行编码,以使它们符合 即,检查除alphanum之外的每个字符/?:@&=+$-.!~*'()\^[]``被替换为%[hex-octet] 我想确保,如果使用已编码的URI调用函数,代码不会破坏它 到目前为止,我所做的只是寻找一个“%”符号后跟2个八位字符。我找到的任何其他保留字符都要替换 我还需要做其他检查吗 不要介意安全问题;它们正在其他地方处理。嗯,你怎么知道已经编码的URI不应该再次编码?也许URI包含,我不知道,如何对URI进行编码的示例,如果第二次没
%[hex-octet]
我想确保,如果使用已编码的URI调用函数,代码不会破坏它
到目前为止,我所做的只是寻找一个“%”符号后跟2个八位字符。我找到的任何其他保留字符都要替换
我还需要做其他检查吗
不要介意安全问题;它们正在其他地方处理。嗯,你怎么知道已经编码的URI不应该再次编码?也许URI包含,我不知道,如何对URI进行编码的示例,如果第二次没有编码,那么解码会破坏它吗
也就是说,您可以检查是否只存在允许的字符加上
%
,以及是否每个%
后面都有一个十六进制数。如果是,很有可能(但不能保证)编码已经完成。我认为正确编码的URI应该总是在第二次完全通过
原因是无论发生什么,您都必须正确解析URI,因为使用/@.&=代码>在URI中,前提是它们出现在正确的位置
因此,只有在URI的该部分不合法时,才对字符进行编码。使用该断言,然后创建一个编码字符串,该字符串在每个位置都是合法的,因此当您解析它时,就没有什么可编码的了
请记住,如果有人向您抛出一个URI进行编码,而它恰好是不明确的(即它包含改变URI语法的特殊字符),那么他们就不能期望得到正确的结果
为了更直接地回答你的问题,我想说是的:鉴于以上所有情况,你只需要对%
转义序列进行特殊处理。我不介意第二种编码本身,我真正不想做的是通过监督某件事来把它搞砸。事实上,我会修改我的答案。。。处理逃逸序列不是特殊处理。这只是符合RFC的整体处理的一部分。