如何为HTML编码字符串?

时间:2010-01-20 21:26:36

标签: perl html-encode

我正在寻找一种在Perl中对字符串/对象进行HTML编码的简单方法。使用的附加包越多越好。

3 个答案:

答案 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 }}