变量$html中有一个字符串,其中包含缩小的HTMl代码,所有代码都在一行中,如下所示:
$html = '<body><div><p>hello</p><div></body>';如何美化/漂亮地打印HTML,使我的变量变成如下所示:
$html = '<body>
<div>
<p>hello</p>
<div>
</body>';我知道整洁扩展是可能的,但是如果没有扩展,如何做到这一点。
编辑:请阅读问题。我不是在问如何通过一些外部网站美化HTML代码。我想知道如何在PHP中实现它,特别是针对string变量.。
发布于 2016-01-01 14:19:23
使用DomDocument,我们加载传递LIBXML_HTML_NOIMPLIED标志的html
这将阻止loadHTML方法添加额外的html包装器。
我们保存为XML以获得良好的缩进,同时传递$dom->documentElement参数以防止XML头。
$html = '<body><div><p>hello</p><div></body>';
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML($html,LIBXML_HTML_NOIMPLIED);
$dom->formatOutput = true;
print $dom->saveXML($dom->documentElement);这将输出
<body>
<div>
<p>hello</p>
<div/>
</div>
</body>请注意,HTML是为您修复的,因为我认为第二个div应该是一个结束标记。
如果我们将正确的HTML作为输入字符串传递,则输出将按照您的要求进行。
$html = '<body><div><p>hello</p></div></body>';
<body>
<div>
<p>hello</p>
</div>
</body>发布于 2020-03-11 06:22:11
我使用过DOMDocument,但它似乎对破坏的html和html错误非常敏感。
无论如何,DOMDocument需要dom extension,所以我使用了整齐的php扩展,因为它对我来说非常完美--它还修复了html错误并美化了html。
使用示例中的代码:
$config = array(
'indent' => true,
'output-xhtml' => true,
'wrap' => 200);
// Tidy
$tidy = new \tidy;
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();
// Output
echo $tidy;发布于 2016-01-01 14:03:33
虽然我不知道有什么预先构建的东西可以做到这一点(大多数解析器提供了缩小HTML的功能,而不是美化它),但您自己应该不难做到:
DOMDocument可能是个好主意。textContent
否则,递归到元素中,输出每个子节点,无论是文本还是元素。根据递归级别的数量适当地缩进。
还有..。就这样。应该不会太难:)
https://stackoverflow.com/questions/34556727
复制相似问题