您无需执行任何特殊操作即可处理包含& 的参数值。例如,$cgi->param('brand') 将返回 Bell & Ross
http://someurl/?brand=Bell%20%26%20Ross&category=Wrist%20Watch%20Dealers&qq_cat_id=8798798
^^^
问题是 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),
);
或
use URI qw( );
my $url = URI->new('http://someurl/');
$url->query_form(
brand => $brand,
category => $category,
qq_cat_id => $qq_cat_id,
);
或
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 );