有没有一种巧妙的方法将 Perl 哈希序列化为 HTML 查询字符串
我有一个使用 CGI 的 perl 脚本。
浏览器用一些参数调用它。
我想获取这些参数,修改其中一些参数,然后发回带有表示修改后的参数的新查询字符串的重定向。
我知道我可以这样做,就像这样:
my $cgi = CGI->new()
my %vars = $cgi->Vars
$vars{'modify_me'} .=' more stuff';
my $serialized = join '&', map {$_.'='.$cgi->escapeHTML($vars{$_})} keys %vars;
然而,这只是感觉它可能缺少一些东西。此外,它不执行任何处理多值参数的操作。谁知道它还能做什么。
那么,有没有一个模块可以解决这个问题呢?我对重新发明一个更有才华的工匠制造的轮子不感兴趣。正确的?
I have a perl script using CGI.
The browser calls it with some parameters.
I want to take those parameters, modify some of them and then send back a redirect with a new querystring representing the modified parameters.
I know that I could do this, like this:
my $cgi = CGI->new()
my %vars = $cgi->Vars
$vars{'modify_me'} .=' more stuff';
my $serialized = join '&', map {$_.'='.$cgi->escapeHTML($vars{$_})} keys %vars;
However, this just feels like it might be missing something. In addition, it doesn't do anything to handle multivalued parameters. Who knows what else it fails to do.
So, is there a module out there that just deals with this problem? I'm not interested in reinventing a wheel that a more talented wright wrought. Right?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
URI 模块 是你的朋友。它有一个
query_form
方法,该方法采用参数的 hash、hashref 或 arrayref 并从中生成查询字符串。它将为您对您的数据进行 URL 编码(请注意,您确实希望对其进行 URL 编码而不是 HTML 编码)。
所以你可能会遇到类似的情况:
The URI module is your friend. It has a
query_form
method that takes a hash, hashref or arrayref of parameters and generates a query string from it.It will URL Encode your data for you (and note that you do want it URL Encoded and not HTML Encoded).
So you might have something like:
您是否看过 Data::URIEncode或 URI::QueryParam?
Have you looked at Data::URIEncode or URI::QueryParam?
事实证明,有一种方法可以仅使用
CGI
模块来满足我的特定需求。然而,其他答案涵盖了更广泛的需求,即序列化任意哈希。如果您想修改传入参数,然后使用修改后的参数创建指向同一脚本的链接,您可以执行以下操作:
Turns out, there's a way to achieve my specific need using just the
CGI
module. However, the other answers cover a wider need, to serialize an arbitrary hash.If you want to modify incoming parameters and then create a link to the same script with modified parameters you can do this: