Проверка корректности html тегов

105
16 марта 2018, 14:48

Добрый день! Мне нужно Написать функцию, которая на входе принимает массив из открывающихся или закрывающихся тегов, а возвращает результат проверки корректности. Вот что у меня сделано, но работает неправильно. Подскажите, в чем проблема или нужно мне другой алгоритм решения? Спасибо.

   (например “<a>”, “</td>” )
$корректная_структура = ['<a>', '<div>', '</div>', '</a>', '<span>', '</span>'];
$некорректная_структура = ['<a>', '<div>', '</a>', '<p>' , '</tr>'];
function validate_html_tags($html_tags) {
$tags = htmlspecialchars(implode("", $html_tags));
$html_doc="<!DOCTYPE html>" . "<html><body>" . $tags . "</body></html>";    
// $html_doc="<!DOCTYPE html>" . $tags . ;    
$dom = new DOMDocument;
$dom->loadHTML($html_doc);
$dom->saveHTML();
if ($dom->validate()) {
    echo "This document is valid!\n";
} else {
    echo "This document is invalid!\n";
}
return $tags;   

}

Вот ошибки: 
Warning: DOMDocument::validate(): No declaration for element html in 
Warning: DOMDocument::validate(): No declaration for element body in 
This document is invalid! string(67) "<a><div></div></a><span></span>"
Answer 1
Warning: DOMDocument::validate(): No declaration for element html in 
Warning: DOMDocument::validate(): No declaration for element body in

Первые 2 ошибки возникли из-за того, что Вы использовали метод saveHtml для неправильной структуры домдокумента без валидации.

3 сообщение - оповещение о том, что документ не прошел валидацию.

Вы пропустили <head> и класс DOMDocument ругается на некорректный документ.

Замените

$html_doc="<!DOCTYPE html>" . "<html><body>" . $tags . "</body></html>";

На

$html_doc="<!DOCTYPE html><html><head></head><body>" . $tags . "</body></html>";

И $dom->saveHTML(); добавьте после успешной валидации

И раз уж задача состоит в возвращает результат проверки корректности то возвращать нужно не $tag, а true или false в зависимости от результатов. Вот переделанный вариант функции

function validate_html_tags($html_tags) {
$tags = htmlspecialchars(implode("", $html_tags));
$html_doc="<!DOCTYPE html><head></head><html><body>" . $tags . "</body></html>";      
$dom = new DOMDocument;
$dom->loadHTML($html_doc);
if ($dom->validate()) {
    echo "This document is valid!\n";
    $dom->saveHTML(); // хотя зачем тут это
    return true;
} 
echo "This document is invalid!\n";
return false;   
}
READ ALSO
Подключить класс php

Подключить класс php

Проблема такая - стоит autoload, и классы из определенных папок подгружаются сами, все работало, но появилась задача сделать ajax запрос с БД, обычно...

142
Как запустить php скрипт в браузере?

Как запустить php скрипт в браузере?

скрипт лежит в корне сайтаЗапускаю в браузере

123
Система отслеживания для логистики [требует правки]

Система отслеживания для логистики [требует правки]

Как сделать систему для отслеживания посылки? серверный часть могу догадаться как, но вот как сканировать и как собрать нужные данный например...

158
Парсинг numbuster.com

Парсинг numbuster.com

Добрый день! Пытаюсь спарсить тег <div class="descr">Всего возможных имен: 4</div> с сайта https://numbustercom/ru/number/380977777777, но в ответ получаю

226