我有一些HTML输出存在于一个变量中,我想要Prettify / Beautify但是很难理解我的网页搜索结果。
我发现的大多数选项,如PerlTidy(甚至不确定它是一个正确的选项)似乎都假设HTML在一个文件中但在我的情况下,它已经放在一个Perl脚本中并存储在一个变量,我只是想通过删除多余的换行符和缩进来解决这个问题,然后在发送到输出之前将其保存到另一个变量。
寻找符合
的内容$output= SomePerlModule::Prettify($HTML);
我希望可以将其添加到我现有的脚本中。
如果它还可以删除孤立的结束标记,则会获得奖励。基本上,我有一些结束标记,例如没有开始标记,虽然浏览器似乎能够处理这个,但最好将它们剥离出来。
有这样的模块吗?
答案 0 :(得分:3)
HTML::Tidy正是如此:
#!/usr/bin/perl
use strict;
use warnings;
use HTML::Tidy;
my $str = '<div><p>Text<h2>Heading</h2>';
my $tidy = 'HTML::Tidy'->new;
print $tidy->clean($str);
<强>输出强>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content="tidyp for Linux (v1.04), see www.w3.org">
<title></title>
</head>
<body>
<div>
<p>Text</p>
<h2>Heading</h2>
</div>
</body>
</html>
答案 1 :(得分:2)
我建议您首先生成有效的HTML。拿出正确的模板,然后填写。
相反,看起来您在Perl中使用print
语句来生成HTML。有一天,后期处理会做错事,你不知道在哪里以及如何修复它会出错。
填写模板可以避免所有这些问题。任何模板模块都优于print
HTML,但Template.pm有一个很好的生态系统。
鉴于HTML不在您的控制之下,如果HTML::PrettyPrinter为您的HTML生成正确的语法树,您可能还需要考虑HTML::TreeBuilder。