perl中链接中的%3f和%3d

时间:2013-02-02 00:08:57

标签: perl decoding

我对perl很新,并编写了一个小脚本,使用LWP从页面中提取链接,结果将被解码为以下格式:

http://www.perlmonks.org/%3fnode_id%3d376075

而不是:

http://www.perlmonks.org/?node_id=376075

我不熟悉那种语法......它叫什么?是否有一种简单的方法可以将其翻译回来?

2 个答案:

答案 0 :(得分:1)

这是URL Encoding在行动。

有几个perl库可以帮助解码,反之亦然。以下是快速搜索中弹出的内容:http://www.perlhowto.com/encode_and_decode_url_strings

答案 1 :(得分:1)

http://www.perlmonks.org/%3fnode_id%3d376075

http://www.perlmonks.org/?node_id=376075

不是等效的网址。将uri_unescape应用于网址永远不正确。它应该只用于提取的组件。第一个访问名为?node_id=376075的文件。第二个访问默认文件(恰好是index.pl)并将名为node_id的arg传递给它。

也许你真的有像

这样的东西
foo.cgi?redirect=http://www.perlmonks.org/%3fnode_id%3d376075

在这种情况下你想要URI。它既提取部件又解码它们。正常。

use URI qw( );
my $url = URI->new('foo.cgi?redirect=http://www.perlmonks.org/%3fnode_id%3d376075');
my %form = $url->query_form();
say $form{redirect};  # http://www.perlmonks.org/?node_id=376075