我很可能在这里遗漏了一些明显的东西,但为什么我需要调用搜索/替换正则表达式两次才能在下面的代码中产生任何影响?如果我只打电话一次,则不会进行更换: - (
use strict;
use warnings;
use LWP::Simple;
my $youtubeCN = get(shift @ARGV);
die("Script tag not found!\n")
unless $youtubeCN =~ /<script src="(.*?)">/;
my $youtubeScr = $1;
# WHY ???
$youtubeScr =~ s/&/&/g;
$youtubeScr =~ s/&/&/g;
my $gmodScr = get($youtubeScr);
$gmodScr =~ s/http:\/\/\?container/http:\/\/www.gmodules.com\/ig\/ifr\?/;
print "<script type=\"text/javascript\">$gmodScr</script>\n";
更新:我将此脚本称为:
perl bork_youtube_channel.pl 'http://www.youtube.com/user/pennsays'
如果放大器未正确转换为&amp;,我将在步骤2返回HTML页面(可能是错误页面)而不是Javascript。
更新:事实证明,网址毕竟是双重编码的。谢谢大家的帮助!
答案 0 :(得分:7)
我怀疑如果你看一下输入数据,是做正确的事 - 我的猜测是在编码和解码的过程中,你没有看到真正的输入和输出。例如,试试这个:
use strict;
use warnings;
my $youtubeScr = "a&b";
$youtubeScr =~ s/&/&/g;
print $youtubeScr;
print "\n";
$youtubeScr =~ s/&/&/g;
print $youtubeScr;
print "\n";
打印
a&b
a&b
换句话说,它已经开始工作了。
您确定原始文字不是foo&amp;bar
吗?那会产生
foo&bar
foo&bar
使用上面的代码。
PS我的perl-fu糟透了。对于上述代码中的任何语言滥用行为表示道歉,但我认为它应该仍然有用:)