PHP DOMDocument разрешить пустые атрибуты во входном HTML? - PullRequest
0 голосов
/ 21 сентября 2019

Я пытаюсь создать что-то для анализа пользовательского HTML, аналогично тому, что вы можете сделать, например, в Vue.js или React.Там вы можете использовать пустые атрибуты, но phps \ DOMDocument выдает ошибку для разметки, например:

<div><div foo></div></div>

Предупреждение PHP: DOMDocument :: loadXML (): спецификация указывает значение атрибута foo в Entity, строка: 11

Просто сделайте это, чтобы воспроизвести проблему:

$document = new \DOMDocument();
$document->loadXML($html);

Я уже прочитал https://www.php.net/manual/en/domdocument.loadxml.php и https://www.php.net/manual/en/libxml.constants.php и попыталсяLIBXML_NOWARNING но предупреждение все равно появилось по любой причине.Затем я попробовал LIBXML_NOERROR, но это вообще не привело к выводу.

Я не использую $document->loadHTML($html); намеренно, потому что при использовании с неизвестными тегами вы получите это предупреждение:

Предупреждение PHP: DOMDocument :: loadHTML (): тег mytag недействителен в Entity.

Я знаю, что могу подавить это предупреждение, но я бы предпочел вообще не подавлять предупреждения.Могут быть и другие предупреждения, и я не считаю хорошим стилем кодирования подавление предупреждений, они не должны появляться, потому что могут быть побочные эффекты.Если не возражаете переключиться на loadHTML (), если есть другой способ предотвратить это предупреждение.

Так есть ли способ, которым я могу иметь дело с пустыми атрибутами значения, у которых значение вообще не определено вразметка с использованием \ DOMHtml?

1 Ответ

1 голос
/ 21 сентября 2019

стандартная сборка в классе php DOMDocument не поддерживает нотацию HTML5.

Я только что сделал небольшую попытку со следующей библиотекой, и она импортирует и экспортирует ваш фрагмент без предупреждения:

HTML5DOMDocument

...