Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Url 防止对URI进行两次编码_Url_Uri - Fatal编程技术网

Url 防止对URI进行两次编码

Url 防止对URI进行两次编码,url,uri,Url,Uri,我正在尝试编写一个函数来对URI进行编码,以使它们符合 即,检查除alphanum之外的每个字符/?:@&=+$-.!~*'()\^[]``被替换为%[hex-octet] 我想确保,如果使用已编码的URI调用函数,代码不会破坏它 到目前为止,我所做的只是寻找一个“%”符号后跟2个八位字符。我找到的任何其他保留字符都要替换 我还需要做其他检查吗 不要介意安全问题;它们正在其他地方处理。嗯,你怎么知道已经编码的URI不应该再次编码?也许URI包含,我不知道,如何对URI进行编码的示例,如果第二次没

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

即,检查除alphanum之外的每个字符<代码>/?:@&=+$-.!~*'()\^[]``被替换为
%[hex-octet]

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

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

我还需要做其他检查吗


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

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


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

我认为正确编码的URI应该总是在第二次完全通过

原因是无论发生什么,您都必须正确解析URI,因为使用
/@.&=在URI中,前提是它们出现在正确的位置

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

请记住,如果有人向您抛出一个URI进行编码,而它恰好是不明确的(即它包含改变URI语法的特殊字符),那么他们就不能期望得到正确的结果


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

我不介意第二种编码本身,我真正不想做的是通过监督某件事来把它搞砸。事实上,我会修改我的答案。。。处理逃逸序列不是特殊处理。这只是符合RFC的整体处理的一部分。