Как указано в комментариях, для DOMDocument::validate
существует запрос об ошибке / FeatureRequest для принятия DTD в виде строки:
Вы можете самостоятельно разместить DTD и соответственно изменить systemId
, или вы можете предоставить пользовательский контекст потока для любой загрузки, выполняемой через libxml. Например, предоставление UserAgent обойдет блокировку W3C. Вы также можете добавить прокси таким образом. Смотри
* * 1 022 Пример: * 1 023 *
$di = new DOMImplementation;
$dom = $di->createDocument(
'html',
'html',
$di->createDocumentType(
'html',
'-//W3C//DTD XHTML 1.0 Transitional//EN',
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'
)
);
$opts = array(
'http' => array(
'user_agent' => 'PHP libxml agent',
)
);
$context = stream_context_create($opts);
libxml_set_streams_context($context);
var_dump($dom->validate());
Это выдаст
Warning: DOMDocument::validate(): Element html content does not follow the DTD, expecting (head , body), got
Warning: DOMDocument::validate(): Element html namespace name for default namespace does not match the DTD
Warning: DOMDocument::validate(): Value for attribute xmlns of html is different from default "http://www.w3.org/1999/xhtml"
Warning: DOMDocument::validate(): Value for attribute xmlns of html must be "http://www.w3.org/1999/xhtml"
bool(false)