Я использовал 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?
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
Другой, на который следует обратить внимание, - это обработка встроенного Элементы