Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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
Perl URI解码时删除百分号_Perl_Urlencode_Html Escape Characters - Fatal编程技术网

Perl URI解码时删除百分号

Perl URI解码时删除百分号,perl,urlencode,html-escape-characters,Perl,Urlencode,Html Escape Characters,我试图在Perl中解码表单数据的一个编码位,编码的数据是%25admin,应该解码为%admin。我正在使用一些长时间重复的简单正则表达式: $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; 这组正则表达式多年来一直为我提供很好的服务,通常效果很好,但在本例中,它输出的是解码字符串中缺少的min%ad,就好像它是转义字符

我试图在Perl中解码表单数据的一个编码位,编码的数据是%25admin,应该解码为%admin。我正在使用一些长时间重复的简单正则表达式:

    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;    
    $value =~ s///g;
这组正则表达式多年来一直为我提供很好的服务,通常效果很好,但在本例中,它输出的是解码字符串中缺少的min%ad,就好像它是转义字符的一部分一样。我遗漏了什么,它导致它将字符%25ad解释为单个转义字符,而不是将%25解释为转义字符,并将ad解释为独立于它

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;    
这将成功地将%25admin转换为%admin,这实际上是您想要的结果。但出于某种未知的原因,您可以使用一个空模式进行另一个替换:

$value =~ s///g;
这个空模式有一个特殊的含义。发件人:

空模式// 如果模式的计算结果为空字符串,则使用最后一个成功匹配的正则表达式

最后一个成功匹配的正则表达式位于上一行,因此此语句的基本意思是:

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])//g;
这与%admin匹配,结果为min

这将成功地将%25admin转换为%admin,这实际上是您想要的结果。但出于某种未知的原因,您可以使用一个空模式进行另一个替换:

$value =~ s///g;
这个空模式有一个特殊的含义。发件人:

空模式// 如果模式的计算结果为空字符串,则使用最后一个成功匹配的正则表达式

最后一个成功匹配的正则表达式位于上一行,因此此语句的基本意思是:

$value =~ s/%([a-fA-F0-9][a-fA-F0-9])//g;

这与%admin匹配,结果为min.

您希望s///g做什么?它几乎肯定不是在做你想做的事情。你希望s///g做什么?几乎可以肯定,这并不是你想要的。谢谢你,@Steffen Ullrich。我几年前就继承了这段代码,实际上是想让自己重新认识为什么我会有第二个条目——这对我来说没有什么意义,但直到现在,它还是起作用了,所以我试图弄清楚它是否遗漏了什么。我将删除它。@TimothyR.Butler:直到现在,它仍然有效——这取决于第二个正则表达式是否会造成伤害。如果您输入了%25foobar,那么第一个正则表达式将用%foobar替换它,但第二个正则表达式将不匹配,因此结果将保持预期的%foobar。是的-我只是认为我没有将它推到这一点,在我将代码放在那里将近20年之后。我总是紧张地删除我不记得最初的目的的代码,但我现在已经删除了。谢谢你,谢谢你,@Steffen Ullrich。我几年前就继承了这段代码,实际上是想让自己重新认识为什么我会有第二个条目——这对我来说没有什么意义,但直到现在,它还是起作用了,所以我试图弄清楚它是否遗漏了什么。我将删除它。@TimothyR.Butler:直到现在,它仍然有效——这取决于第二个正则表达式是否会造成伤害。如果您输入了%25foobar,那么第一个正则表达式将用%foobar替换它,但第二个正则表达式将不匹配,因此结果将保持预期的%foobar。是的-我只是认为我没有将它推到这一点,在我将代码放在那里将近20年之后。我总是紧张地删除我不记得最初的目的的代码,但我现在已经删除了。非常感谢。