【问题标题】:Perl - Parse URL to get a GET Parameter ValuePerl - 解析 URL 以获取 GET 参数值
【发布时间】:2012-09-07 16:05:12
【问题描述】:

如何使用URI::URL Perl 模块获取参数code 的值?

从此链接:

http://www.someaddress.com/index.html?test=value&code=INT_12345

可以使用URI::URLURI 来完成(我知道第一个已经过时了)。提前致谢。

【问题讨论】:

标签: perl parsing url uri


【解决方案1】:

创建一个URI 对象并使用query_form 方法获取查询的键/值对。如果你知道code参数只指定一次,你可以这样做:

my $uri   = URI->new("http://www.someaddress.com/index.html?test=value&code=INT_12345");
my %query = $uri->query_form;

print $query{code};

您也可以使用 URI::QueryParam 向 URI 对象添加一些附加方法:

my $uri = URI->new("http://www.someaddress.com/index.html?test=value&code=INT_12345");
print $uri->query_param("code");

【讨论】:

    【解决方案2】:
    use URI;
    my $uri   = URI->new("http://someaddr.com/index.html?test=FIRST&test=SECOND&code=INT_12345");
    my %query = $uri->query_form;
    use Data::Dumper;
    print Dumper \%query;
    

    我们可以看到:

       $VAR1 = {
                  'test' => 'SECOND',
                  'code' => 'INT_12345'
                };
    

    很遗憾,这个结果是错误的。

    有可能的解决方案:

    use URI::Escape;
    
    sub parse_query {
       my ( $query, $params ) = @_;
       $params ||= {};
       foreach $var ( split( /&/, $query ) ){
         my ( $k, $v ) = split( /=/, $var );
         $k = uri_unescape $k;
         $v = uri_unescape $v;
         if( exists $params->{$k} ) {
            if( 'ARRAY' eq ref $params->{$k} ) {
               push @{ $params->{$k} }, $v;
            } else {
               $params->{$k} = [ $params->{$k}, $v ];
            }
         } else {
            $params->{$k} = $v;
         }
       }
       return $params;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多