我试图在URL中传递参数并使用param()读取参数.我的一个参数值包含一个'&'符号,因此在通过param()读取值时,它会在'&'之后跳过该部分.有没有什么方法可以使用这种方法而不会损害包含'&'的值?
例:
HTTP:// someurl /品牌=贝尔%20&%20Ross&类别=手腕%20Watch%20Dealers&qq_cat_id = 8798798
参数品牌的价值是"贝尔",而不是"贝尔和罗斯".
您不必执行任何特殊操作来处理包含的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)