我正在寻找一种在Perl中对字符串/对象进行HTML编码的简单方法。使用的附加包越多越好。
答案 0 :(得分:30)
HTML::Entities是你的朋友。
use HTML::Entities;
my $encoded = encode_entities( "foo & bar & <baz>" );
答案 1 :(得分:27)
首次回答此问题时,HTML::Entities是大多数人可能使用的模块。它是纯Perl,默认情况下会转义HTML保留字符><'"&
和宽字符。
最近,HTML::Escape出现了。它有XS和纯Perl。如果您使用的是XS版本,它的速度比HTML::Entities快十倍。但是,它只会转义><'"&
并且无法更改默认值。这是与XS版本的区别:
Benchmark: timing 10000 iterations of html_entities, html_escape...
html_entities: 14 wallclock secs (14.09 usr + 0.01 sys = 14.10 CPU) @ 709.22/s (n=10000)
html_escape: 1 wallclock secs ( 0.68 usr + 0.00 sys = 0.68 CPU) @ 14705.88/s (n=10000)
这里是纯粹Perl版本的公平斗争:
Benchmark: timing 10000 iterations of html_entities, html_escape...
html_entities: 14 wallclock secs (13.79 usr + 0.01 sys = 13.80 CPU) @ 724.64/s (n=10000)
html_escape: 7 wallclock secs ( 7.57 usr + 0.01 sys = 7.58 CPU) @ 1319.26/s (n=10000)
您可以在Surveyor::Benchmark::HTMLEntities中获得这些基准。我使用how I distribute benchmarks解释Surveyor::App。
答案 2 :(得分:4)
您需要编码,字符串或对象?如果它只是一个字符串,那么您只需要担心编码问题(如UTF-8),而CGI::escape可能会为您解决问题。如果它是一个对象,您需要先将其序列化,这会产生一系列新问题,但您可能需要考虑JSON - 对其进行编码。
PS。虽然由于我找不到关于此方法的任何最新文档(它实际上是从CGI::Util导入并标记为“内部”),但您应该使用escapeHTML()作为daxim在他的评论中指出:{{3 }}