我如何处理'&';在perl cgi url参数中,其中参数值包含一个'&';签名

我如何处理'&';在perl cgi url参数中,其中参数值包含一个'&';签名,perl,cgi,Perl,Cgi,我正在尝试在URL中传递参数,并使用param()读取参数。 我的一个参数值包含一个“&”符号,因此当通过param()读取该值时,它会跳过“&”后面的部分。 是否有任何方法可以在不影响包含“&”的值的情况下使用此方法 例如: 参数品牌的值是“Bell”,而不是“Bell&Ross”。处理包含&的参数值不必做任何特殊的操作。例如,$cgi->param('brand')将返回Bell&RossFor http://someurl/?brand=Bell%20%26%20Ross&cat

我正在尝试在URL中传递参数,并使用param()读取参数。 我的一个参数值包含一个“&”符号,因此当通过param()读取该值时,它会跳过“&”后面的部分。 是否有任何方法可以在不影响包含“&”的值的情况下使用此方法

例如:


参数品牌的值是“Bell”,而不是“Bell&Ross”。

处理包含
&
的参数值不必做任何特殊的操作。例如,
$cgi->param('brand')
将返回
Bell&Ross
For

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),
);


处理包含
&
的参数值不需要做任何特殊的操作。例如,
$cgi->param('brand')
将返回
Bell&Ross
For

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),
);


你的URL并不代表你认为它的意思。这并不意味着创造它的人认为这意味着什么。
&
字符在URL中有特殊的含义-它分隔不同的参数。任何遇到URL的URL解析器都会在该点拆分参数(这就是为什么会得到“Bell”而不是“Bell&Ross”)

如果希望URL中的
&
不被视为分隔符,则需要对
&
进行URL编码(这会将其转换为
%26

问题不在于处理URL的代码。问题在于生成URL的代码。这就是需要解决的问题


更新:我最初声称URL无效。这不是真的。)

您的URL并不是您认为的意思。这并不意味着创造它的人认为这意味着什么。
&
字符在URL中有特殊的含义-它分隔不同的参数。任何遇到URL的URL解析器都会在该点拆分参数(这就是为什么会得到“Bell”而不是“Bell&Ross”)

如果希望URL中的
&
不被视为分隔符,则需要对
&
进行URL编码(这会将其转换为
%26

问题不在于处理URL的代码。问题在于生成URL的代码。这就是需要解决的问题


更新:我最初声称URL无效。事实并非如此。)

第二种方法工作得非常好。非常感谢@ikegami帮助解决这个问题。第二种方法非常有效。非常感谢@ikegami帮助解决这个问题。不,OP的url是完全有效的。是的,我想你是对的。它是有效的;这并不意味着他们认为这意味着什么。不,OP的url是完全有效的。是的,我想你是对的。它是有效的;这并不意味着他们认为这意味着什么。