Ответ 1
вы правы, кажется, что нет отступов для HTML (другие тоже путаются). XML работает даже с загруженным кодом.
<?php
function tidyHTML($buffer) {
// load our document into a DOM object
$dom = new DOMDocument();
// we want nice output
$dom->preserveWhiteSpace = false;
$dom->loadHTML($buffer);
$dom->formatOutput = true;
return($dom->saveHTML());
}
// start output buffering, using our nice
// callback function to format the output.
ob_start("tidyHTML");
?>
<html>
<head>
<title>foo bar</title><meta name="bar" value="foo"><body><h1>bar foo</h1><p>It like comparing apples to oranges.</p></body></html>
<?php
// this will be called implicitly, but we'll
// call it manually to illustrate the point.
ob_end_flush();
?>
результат:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>foo bar</title>
<meta name="bar" value="foo">
</head>
<body>
<h1>bar foo</h1>
<p>It like comparing apples to oranges.</p>
</body>
</html>
то же самое с saveXML()...
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>foo bar</title>
<meta name="bar" value="foo"/>
</head>
<body>
<h1>bar foo</h1>
<p>It like comparing apples to oranges.</p>
</body>
</html>
возможно забыл установить preserveWhiteSpace = false перед загрузкойHTML?
Отказ от ответственности: я украл большую часть демо-кода из комментариев пользователя tyson clugg/php. ленивый.
ОБНОВЛЕНИЕ: Теперь я помню несколько лет назад, я попробовал то же самое и столкнулся с той же проблемой. Я исправил это, применив грязное обходное решение (не критично для производительности): я как-то конвертировал между SimpleXML и DOM, пока проблема не исчезла. я полагаю, что преобразование избавилось от этих узлов. возможно, загрузить с dom, импортировать с помощью
simplexml_import_dom
, затем вывести строку, снова проанализировать это с помощью DOM, а затем напечатать ее довольно. насколько я помню, что это сработало (но это было очень медленно).