gordon_shamway
@gordon_shamway

Как можно удалить вложенные теги из html файла?

Как можно удалить вложенные теги из html файла?
Есть такой текст
<p>
	Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
<p>
	<p>
		Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
	</p>
	<p>
		Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
		<p>xcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
	</p>
</p>
<p>
	<p>
		Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
	</p>	
</p>

Как через php можно его нормализовать чтобы он выглядел так?
(В тексте есть и другие теги но проблема только с <p>)
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat</p>
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p>xcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
TommyV888
@TommyV888 Куратор тега PHP
-
Просто используйте DOMDocument:
$dom = new DOMDocument(1, "UTF-8");
@$dom->loadHTML($html);

$body = $dom->getElementsByTagName('body')[0];
$new_html = '';

foreach ($body->childNodes as $node)
{
    if( $node->nodeName === '#text' ){
        $new_html .= $node->textContent;
    }else{
        $new_html .= '<'.$node->nodeName.'>'.$node->textContent.'</'.$node->nodeName.'>';
    }
}

P.S.: Если вы уверены что текста вне тегов у вас не будет, вот это "$new_html .= $node->textContent;", можно убрать, т.к. создает лишние пробелы
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы