如何在perl cgi url参数中处理'&',其中参数值包含'&'符号

Tar*_*ash 1 perl cgi

我试图在URL中传递参数并使用param()读取参数.我的一个参数值包含一个'&'符号,因此在通过param()读取值时,它会在'&'之后跳过该部分.有没有什么方法可以使用这种方法而不会损害包含'&'的值?

例:

HTTP:// someurl /品牌=贝尔%20&%20Ross&类别=手腕%20Watch%20Dealers&qq_cat_id = 8798798

参数品牌的价值是"贝尔",而不是"贝尔和罗斯".

ike*_*ami 6

您不必执行任何特殊操作来处理包含的param值&.例如,$cgi->param('brand')将返回Bell & Ross

http://someurl/?brand=Bell%20%26%20Ross&category=Wrist%20Watch%20Dealers&qq_cat_id=8798798
                             ^^^
Run Code Online (Sandbox Code Playgroud)

问题是OP中的URL没有正确构建; 该brand参数没有设置Bell & Ross.以下所有内容都将正确构建url:

use URI::Escape qw( uri_escape );

my $url = 'http://someurl/';
$url .= "?" . join('&', 
   join('=', map { uri_escape($_) } brand     => $brand),
   join('=', map { uri_escape($_) } category  => $category),
   join('=', map { uri_escape($_) } qq_cat_id => $qq_cat_id),
);
Run Code Online (Sandbox Code Playgroud)

要么

use URI qw( );

my $url = URI->new('http://someurl/');
$url->query_form(
   brand     => $brand,
   category  => $category,
   qq_cat_id => $qq_cat_id,
);
Run Code Online (Sandbox Code Playgroud)

要么

use URI             qw( );
use URI::QueryParam qw( );

my $url = URI->new('http://someurl/');
$url->query_param_append( brand     => $brand );
$url->query_param_append( category  => $category );
$url->query_param_append( qq_cat_id => $qq_cat_id );
Run Code Online (Sandbox Code Playgroud)