Анализ DOMDocument и validateOnParse завершаются успешно, анализ и проверка по отдельности завершаются неудачно - PullRequest
2 голосов
/ 01 мая 2020

Вот файл html, который я пытаюсь проверить:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Valid HTML4</title>
</head>
<body>

    <p>Such tidy</p>
    <p>Amaze</p>
    <p>Much HTML4</p>
    <p>Wow</p>

</body>
</html>

Я вручную проверил его валидность с помощью валидатора w3 c (https://validator.w3.org/check).

этот «метод проверки» завершается успешно ($ string содержит содержимое вышеуказанного файла):

    $dom = new \DOMDocument();
    $dom->validateOnParse = true;
    // this succeeds
    $dom->loadHTML($string));

этот «метод проверки» завершается ошибкой:

   $dom = new \DOMDocument();
   $dom->loadHTML($string);
   // this fails
   $dom->validate(); 

дополнительная справочная информация: php 7,4, Lib XML 2,9+. Windows 10. Из-за задержек, встроенных в сервер (ы) W3, я попытался проверить файл двумя способами: первый - отправить запрос go на сервер W3 (занимает около минуты). Сообщение об ошибке в Lib XML сообщает о том, что «не удалось загрузить внешний объект http://www.w3.org/TR/html4/strict.dtd». Второй способ заключается в создании каталога xml для кэширования локальной копии strict.dtd. В этом случае я получаю странную ошибку синтаксического анализатора в строке 81 файла strict.dtd, где он жалуется, что сущность Content-Type не завершена должным образом.

Для меня важно иметь возможность выполнять проверку отдельно от синтаксического анализа. Любая помощь будет отличной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...