变量$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
复制相似问题