我打算从网页中提取内容,其中包含许多以“%xx”形式表示的unicode字符。当我使用Perl模块LWP获取网页时,使用Perl Regex自然处理这些unicode字符,如下所示。
my $html = "%20%26%40 ";
$html =~ s#%([0-9a-f]+)#\x{\1}#ig;
print "$html\n";
但是上面的代码不起作用,它只输出“00”。现在卡住...... 任何提示都将不胜感激。
谢谢,Ye
答案 0 :(得分:8)
Perl已经在URI::Escape
模块中内置了功能。你不需要乱用正则表达式
use URI::Escape;
my $encode = uri_unescape($string);
有关详情,请参阅this page
答案 1 :(得分:2)
答案 2 :(得分:0)
首先,这与HTML无关。 URI使用了这种转义机制。
你必须这样做真的很奇怪。通常需要撤消该编码的唯一方法是接收参数的CGI脚本,在这种情况下,您只需要
use CGI;
my $cgi = CGI->new();
my $foo = $cgi->param('foo');
但是,假设您需要进行自己的URI解析。你可以使用:
use URI;
my %form = URI->new($url)->query_form();
my $foo = $form{'foo'};
答案 3 :(得分:-1)
有趣而丑陋的代码:
my $html = "%20%26%40 ";
$html =~ s#%([0-9a-f]{2})#"chr(0x$1)"#igee;
print "$html\n";
编辑:(我不得不说)这段代码可能是可爱,但不在制作中使用它! (有很多情况下它不起作用)