我正在尝试通过url中的参数并使用param()读取参数。我的参数值之一包含一个'&'签名,因此,在通过param()读取值时,它会跳过'&'之后的零件。有什么办法可以使用此方法,而不会损害包含'&'?
的值示例:
http://http://someUrl/?brand = bell%20&%20ROSS& category = Warist%20watch%20Dealers& qq_cat_id = 8798798
参数品牌的价值即将到来,而不是"贝尔& ross"。
您不必做任何特别的事情来处理包含 &
的param值。例如,$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 );
您的URL并不意味着您认为它的含义。这并不意味着创造它的人认为它的含义。&
字符在URL中具有特殊的含义 - 它分开了不同的参数。任何遇到URL的URL解析器都会在此时拆分参数(这就是为什么您要获得"钟声"而不是" Bell& Ross")。
如果您在URL中想要一个不视为分离器的&
,则需要URL对&
进行编码(将其转换为%26
)。
问题不在处理URL的代码上。问题在于生成URL的代码。这就是需要修复的。
(更新:我最初声称URL无效。这不是真的。)