PHP LIBXML_NOWARNING non sopprime gli avvisi?

L'utilizzo del flag di opzioni LIBXML_NOWARNING non interrompe wanring quando si carica html con PHPDOMDocument-> loadHTML. Altre costanti funzionano però.

Nell'esempio seguente aggiungo LIBXML_HTML_NODEFDTD per dimostrare che le costanti sono state ricevute (impedisce l'aggiunta di un doctype).

$doc=new DOMDocument(); $doc->loadHTML("<tagthatdoesnotexist><h1>Hi</h1></tagthatdoesnotexist>",LIBXML_NOERROR | LIBXML_NOWARNING | LIBXML_HTML_NODEFDTD); echo $doc->saveHTML(); 

Tuttavia, gli avvisi vengono ancora generati e emessi. Cosa mi manca?

Che l' opzione LIBXML_NOWARNING sia ignorata con DOMDocument::loadHTML() è un difetto in PHP (e da DOMDocument::loadHTML() ). Recentemente è stato inserito in una domanda correlata "libxml htmlParseDocument che ignora i flag htmlParseOption" e archiviato come PHP Bug # LIBXML_NOWARNING flag LIBXML_NOWARNING ingnored su loadHTML * .

È tuttavia ansible gestire l'errore gestendo il proprio fino a quando il difetto viene rimosso:

  1. Imposta libxml_use_internal_errors(true) prima di call DOMDocument::loadHTML . Ciò impedirà agli errori di ribellarsi al gestore di errori predefinito. E puoi quindi ottenerli (se lo desideri) usando altre funzioni di errore libxml_get_errors() es. libxml_get_errors() ).
  2. Quando si usa questa function, assicurarsi di cancellare il buffer degli errori interni. Se non lo fai e lo stai utilizzando in un lungo process, potresti scoprire che tutta la tua memory è esaurita.
  3. Se si desidera ripristinare la funzionalità predefinita impostata libxml_use_internal_errors() .

Esempio di codice:

 $doc = new DOMDocument(); # clear errors list if any libxml_clear_errors(); # use internal errors, don't spill out warnings $previous = libxml_use_internal_errors(true); $doc->loadHTML("<tagthatdoesnotexist><h1>Hi</h1></tagthatdoesnotexist>"); echo $doc->saveHTML(); # clear errors list if any libxml_clear_errors(); # restore previous behavior libxml_use_internal_errors($previous); 

Aggiornare

Questo bug è stato risolto ora .