Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > loadHTML переставляет теги


Автор: NTMan 19.6.2008, 23:52
В результате активной работы последнее время над парсингом HTML документов при помощи DOM обнаружил, что докуметы портятся.
Ниже приведенный пример иллюстрирует как закрывающий тег </h2> после загрузки в DOM перескакивает перед параграфом.

Код

<?php
$pagecode = <<<EOT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta content='text/html; charset=windows-1251' http-equiv='Content-Type'>
</HEAD>
<BODY>
<h2>
Большие буквы
<p>Вставлен типа абзац</p>
Должны быть тоже большие буквы
</h2>
</BODY>
</HTML>
EOT;

$doc = new DOMDocument('1.0', 'WINDOWS-1251');
$doc->loadHTML($pagecode);
echo $doc->saveHTML();
?>


Должно было быть:

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta content='text/html; charset=windows-1251' http-equiv='Content-Type'>
</HEAD>
<BODY>
<h2>
Большие буквы
<p>Вставлен типа абзац</p>
Должны быть тоже большие буквы
</h2>
</BODY>
</HTML>


Получаеться:

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta content='text/html; charset=windows-1251' http-equiv='Content-Type'>
</HEAD>
<BODY>
<h2>
Большие буквы
</h2>
<p>Вставлен типа абзац</p>
Должны быть тоже большие буквы
</BODY>
</HTML>


Традиционные два вопроса:
1) Почему так?
2) Как от этого избавиться?

Автор: MystDeim 26.6.2008, 18:03
1) У вас же вёрста невалидная, теги не должны перекрываться!
2) Переверстать без перекрытия тегов.

Автор: IZ@TOP 2.7.2008, 16:40
NTMan, советую обратиться к DTD HTML 4.0 Transitional (entity heading). Там явно сказано, что тег H2 может содержать в себе исключительно inline элементы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)