Intereting Posts
Проверка, является ли строка mysql НЕ в массиве Ошибка FQL 102 Требуется сеанс пользователя для повторного запроса php json_encode не возвращает правильную кодировку json Закрыты ли блокировки PHP, или я что-то не хватает? Удалить заголовок в PHP Обновление до MySQLi – так же легко, как обмен mysql для mysqli? php – перенаправление запросов ajax можете ли вы рассказать мне, что не так с этой функцией вызова API Google Drive в PHP? Показать несколько видов в одной функции в Laravel получить запрошенный контроллер в предварительном контролере крючка в кодеригенере Как предотвратить сканирование в зависимости от XPath от содержимого страниц Сервер – неправильное время Как заменить символы не в диапазоне на «*» в PHP? Сравните массивы multiples и объедините их, когда что-то совпадёт – PHP Как получить доступ к параметрам маршрута, сообщения, получения и т. Д. В Zend Framework 2

Как использовать расширение PHP DOM loadHTML

Мне было предложено, чтобы закрыть некоторые «болтающиеся» HTML-теги, я должен использовать расширение DOM PHP и загрузитьHTML.

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

У меня есть эта строка: <div><p>The quick brown <a href="">fox jumps...

Мне нужно написать функцию, которая закрывает открытые теги HTML.

Просто ищите отправную точку здесь. Обычно я могу быстро разобраться.

Может быть сделано с классом DOMDocument в PHP с использованием методов DOMDocument :: loadHTML () и DOMDocument :: normalizeDocument ().

 <?php $html = '<div><p>The quick brown <a href="">fox jumps'; $DDoc = new DOMDocument(); $DDoc->loadHTML($html); $DDoc->normalizeDocument(); echo $DDoc->saveHTML(); ?> 

Выведет:

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><div><p>The quick brown <a href="">fox jumps</a></p></div></body></html> 

Оттуда, просто substr & strpos удалите html, который вам не нужен, например:

 <?php $html = '<div><p>The quick brown <a href="">fox jumps'; $DDoc = new DOMDocument(); $DDoc->loadHTML($html); $DDoc->normalizeDocument(); $html = $DDoc->saveHTML(); # Remove Everything Before & Including The Opening HTML & Body Tags. $html = substr($html, strpos($html, '<html><body>') + 12); # Remove Everything After & Including The Closing HTML & Body Tags. $html = substr($html, 0, -14); echo $html; ?> 

Хотя я уверен, что вы могли бы заставить DOM делать то, что вы хотите, я вполне уверен, что вам будет лучше с Tidy .

Хорошо, как насчет http://htmlpurifier.org/ ? Также http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/index.php

Можете ли вы использовать Tidy? http://php.net/manual/en/book.tidy.php

Я думаю, что вы следуете неправильному подходу: вы должны использовать материал DOM для усечения строки, а не после ее усечения.

Вот как я это сделаю:

  1. Найдите место, где вы хотите усечь строку
  2. Удалите все дочерние узлы после этой точки
  3. Усечь строку