DOMDocument сохранение HTML с дополнительными тегами

0

Я использую HTMLDom для управления строкой, а не с полной веб-страницей. Когда я использую saveHTML() он автоматически doctype теги doctype и html.

$str = 'frament containing html';
$str = utf8_encode($str);
$doc->LoadHTML($str);
...do stuff...
$str = $doc->saveHTML();

Каков правильный способ сохранить фрагмент HTML без автоматического включения дополнительных тегов. В противном случае; правильный метод для удаления этих дополнительных тегов?

Я использовал синтаксический анализатор html, чтобы избежать использования регулярных выражений, поэтому кажется немного интуитивно понятным, что нужно использовать их на выходе парсера.

  • 0
    Используете ли вы PHP / ext / dom или библиотеку SimpleHtmlDOM (или другую библиотеку)? Ваш пример источника неполный.
  • 0
    Я использую PHP Ext / DOM
Теги:
dom

1 ответ

1
Лучший ответ

PHPs DOMDocument восстанавливает документ, если вы загружаете HTML. Это означает, что он добавляет элементы html и body.

Поэтому вам нужно получить все узлы внутри body и сохранить их как HTML.

$html = <<<'HTML'
<h1>Hello World</h1>
Text
<!-- comment -->
HTML;

$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);

$result = '';
foreach ($xpath->evaluate('/html/body/node()') as $node) {
  $result .= $dom->saveHtml($node);
}

echo $result;

Вот еще один вариант, но он пока недоступен. PHP добавил параметры LIBXML_HTML_NOIMPLIED и LIBXML_HTML_NODEFDTD.

$dom->loadHtml($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

PHP <= 5.3

Первым лучшим вариантом будет обновление PHP. PHP 5.3 больше не поддерживается.

Второй вариант - использование DOMDocument :: saveXML ($ node, LIBXML_NOEMPTYTAG). Это создаст фрагмент XML (XHTML), но для большинства случаев этого должно быть достаточно.

Последним вариантом будет использование строковых функций.

  • 0
    Я пробовал это, но я получаю Warning: DOMDocument::saveHTML() expects exactly 0 parameters, 1 given . Мой сайт находится на сервере под управлением PHP 5.3.3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню