Ищите того, кто использует libxml в среде, отличной от PHP, для подтверждения того, что флаг HTML_PARSE_NOWARNING игнорируется.
Предупреждения все еще генерируются.
Исходный код из PHP, реализующий libxml на C:
//one of these options is 64 or HTML_PARSE_NOWARNING
htmlCtxtUseOptions(ctxt, (int)options);
ctxt->vctxt.error = php_libxml_ctx_error;
ctxt->vctxt.warning = php_libxml_ctx_warning;
if (ctxt->sax != NULL) {
ctxt->sax->error = php_libxml_ctx_error;
ctxt->sax->warning = php_libxml_ctx_warning;
}
htmlParseDocument(ctxt); //this still produces warnings
libxml2 не игнорирует HTML_PARSE_NOWARNING
флаг. призвание htmlCtxtUseOptions
с HTML_PARSE_NOWARNING
вызывает отмену регистрации обработчиков предупреждений (устанавливается в NULL). Но затем PHP-код безоговорочно переходит к установке собственных обработчиков, делая флаг бесполезным. Код PHP должен добавить проверку, устанавливать ли обработчики:
htmlCtxtUseOptions(ctxt, (int)options);
if (!(options & HTML_PARSE_NOERROR)) {
ctxt->vctxt.error = php_libxml_ctx_error;
if (ctxt->sax != NULL)
ctxt->sax->error = php_libxml_ctx_error;
}
if (!(options & HTML_PARSE_NOWARNING)) {
ctxt->vctxt.warning = php_libxml_ctx_warning;
if (ctxt->sax != NULL)
ctxt->sax->warning = php_libxml_ctx_warning;
}
htmlParseDocument(ctxt);
Или позвоните по телефону htmlCtxtUseOptions
после настройки обработчиков:
ctxt->vctxt.error = php_libxml_ctx_error;
ctxt->vctxt.warning = php_libxml_ctx_warning;
if (ctxt->sax != NULL) {
ctxt->sax->error = php_libxml_ctx_error;
ctxt->sax->warning = php_libxml_ctx_warning;
}
htmlCtxtUseOptions(ctxt, (int)options);
htmlParseDocument(ctxt);
Других решений пока нет …