Мне надо отредактировать фрагмент 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); |
на этом этапе можно повырезать и все переносы строк, но хотелось бы более элегантное решение. |