Почему PHP DOM не включает наклонную черту в сам закрывающие тэги?

Я использовал DOM PHP, чтобы загрузить шаблон HTML, изменить его и произвести его. Недавно я обнаружил, что закрывающиеся автоматически (пустые) теги не включают заключительную наклонную черту, даже при том, что шаблонный файл сделал.

например.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"`"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
</body>
</html>

становится:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
</body>
</html>

Действительно ли это - ошибка или установка или проблема doctype?

9
задан peterjwest 29 June 2010 в 22:35
поделиться

2 ответа

DOMDocument-> saveHTML () берет ваш информационный набор XML DOM и записывает его как HTML старой школы, а не XML. Не следует использовать saveHTML () вместе с типом документа XHTML, поскольку его вывод не будет правильно сформированным XML.

Если вместо этого вы используете saveXML () , вы получите правильный XHTML. Можно передать этот вывод XML в браузеры, соответствующие стандартам, если вы укажете ему заголовок Content-Type: application / xhtml + xml . Но, к сожалению, IE6-8 не сможет это прочитать, поскольку они все еще могут обрабатывать только HTML старой школы с типом носителя text / html .

Обычным компромиссным решением является обслуживание text / html и использование «HTML-совместимого XHTML», как указано в Приложении C спецификации XHTML 1.0. Но, к сожалению, не существует метода PHP DOMDocument-> saveXHTML () для генерации правильного вывода для этого.

Есть несколько вещей, которые вы можете сделать, чтобы убедить saveXML () производить HTML-совместимый вывод для некоторых распространенных случаев. Главный из них заключается в том, что вы должны убедиться, что только элементы, определенные HTML4 как имеющие модель содержимого EMPTY ( ,
и т. Д.) имеют пустое содержимое, что приводит к использованию самозакрывающегося синтаксиса ( ). Другие элементы не должны использовать самозакрывающийся синтаксис, поэтому, если они пусты, вы должны поместить пробел в их текстовое содержимое, чтобы они не были такими:

<script src="x.js"/>           <-- no good, confuses HTML parser and breaks page
<script src="x.js"> </script>  <-- fine

Другой, на который следует обратить внимание, - это обработка встроенного Элементы