Я ищу простой способ HTML кодировать строку/объект в Perl. Чем меньше дополнительных пакетов, тем лучше.
Как я могу кодировать строку для HTML?
Ответ 1
HTML::Entities - ваш друг здесь.
use HTML::Entities;
my $encoded = encode_entities( "foo & bar & <baz>" );
Ответ 2
Когда на этот вопрос был дан первый ответ, 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. Я объясняю как распространять тесты, используя Surveyor::App.
Ответ 3
Что вам нужно для кодирования, строки или объекта? Если это просто строка, вам просто нужно будет беспокоиться о проблемах с кодировкой, таких как UTF-8, и CGI:: escape, вероятно, сделает трюк для вас. Если это объект, вам нужно сначала его сериализовать, что открывает целый ряд проблем, но вы можете рассмотреть JSON -кодирование.
PS. Хотя я не могу найти недавнюю документацию по этому методу (она фактически импортирована из CGI::Util и помечена как "внутренняя" ), вы должны, вероятно, использовать escapeHTML(), поскольку daxim указывает в своем комментарии: http://search.cpan.org/perldoc?CGI#AUTOESCAPING_HTML