Добрый день! Мне нужно Написать функцию, которая на входе принимает массив из открывающихся или закрывающихся тегов, а возвращает результат проверки корректности. Вот что у меня сделано, но работает неправильно. Подскажите, в чем проблема или нужно мне другой алгоритм решения? Спасибо.
(например “<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>"
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;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Проблема такая - стоит autoload, и классы из определенных папок подгружаются сами, все работало, но появилась задача сделать ajax запрос с БД, обычно...
Как сделать систему для отслеживания посылки? серверный часть могу догадаться как, но вот как сканировать и как собрать нужные данный например...
Добрый день! Пытаюсь спарсить тег <div class="descr">Всего возможных имен: 4</div> с сайта https://numbustercom/ru/number/380977777777, но в ответ получаю