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


Автор: Gwendolen 30.3.2013, 13:56
Мне надо отредактировать фрагмент html через PHP DOM. 
Проблема в том, что он вставляет переводы строк, которые браузер воспринимает как пробелы. Как избавиться от перевода строк, кроме как их вырезать после генерации документа?

$doc->formatOutput = FALSE; не помогает.


Вот код:
Код

$text = '<div>bbb<p>sadsdsd</p>aaa</div><p><b>xxx</b></p><br><p></p><div>ccc</div>';
print($text);
print('__');
$doc = new DOMDocument();
$doc->loadHTML($text);
$body = $doc->documentElement->getElementsByTagName('body')->item(0);
$filtred_text = $doc->saveHTML($body);
print $filtred_text;
 

Ожидаю:
Цитата

<div>bbb<p>sadsdsd</p>aaa</div><p><b>xxx</b></p><br><p></p><div>ccc</div>__<body><div>bbb<p>sadsdsd</p>aaa</div><p><b>xxx</b></p><br><p></p><div>ccc</div></body>


Но получаю:
Цитата

<div>bbb<p>sadsdsd</p>aaa</div><p><b>xxx</b></p><br><p></p><div>ccc</div>__<body>/n
<div>bbb<p>sadsdsd</p>aaa</div>/n
<p><b>xxx</b></p>/n
<br><p></p>/n
<div>ccc</div>/n
</body>


Если достаю так:

Код

$text = '<div>bbb<p>sadsdsd</p>aaa</div><p><b>xxx</b></p><br><p></p><div>ccc</div>';
print($text);
print('__');
$doc = new DOMDocument();
$doc->loadHTML($text);
$filtred_text = $doc->saveHTML();
print $filtred_text;
 

То получаю почти как надо, но много лишней гадости:
Цитата

<br><div>bbb<p>sadsdsd</p>aaa</div><p><b>xxx</b></p><br><p></p><div>ccc</div>__<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">/n
<html><body><div>bbb<p>sadsdsd</p>aaa</div><p><b>xxx</b></p><br><p></p><div>ccc</div></body></html>/n


P.S. В итоге мне надо получить всё то, что внутри body. Если есть какой другой выдрать его подскажите. После получения, я удаляю body таким образом
Код

$tout =  preg_replace('@^<' . $tag . '[^>]*>|</' . $tag . '>$@', '', $filtred_text);


хотя может буду и таким: 
Код
$tout = substr($filtred_text, 6, -7);

на этом этапе можно повырезать и все переносы строк, но хотелось бы более элегантное решение.

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