Tiene dos opciones. Utilice el operador de control de errores @
en su llamada load()
, p. @$dom->load()
, que es algo lento porque cambia globalmente el valor de display_errors a off, ejecuta la función y la vuelve a activar.
La otra opción, que yo personalmente prefiero (odio el operador @
, no puedo soportar ver que en mi código) es salvar el antiguo valor de libxml_use_internal_errors, habilitarlo mediante libxml_use_internal_errors(TRUE)
, llamar a la función, clara los errores almacenan y restauran el valor anterior. He aquí un fragmento de mi código que hace que:
<?php
$previous_value = libxml_use_internal_errors(TRUE);
$doc->loadHTML((string)$e->response->getBody());
libxml_clear_errors();
libxml_use_internal_errors($previous_value);
que no puedo comentar sobre respuestas, así que voy a escribir aquí:
- solución Michael hace que sea menos estricta, pero es ll seguir emitiendo advertencias de algunos de los errores:
[email protected]:~$ php -r '$dom=new DOMDocument; $dom->strictErrorChecking = FALSE ; $dom->loadHTML("<xy></zx>");'
PHP Warning: DOMDocument::loadHTML(): Tag xy invalid in Entity, line: 1 in Command line code on line 1
- no hacen lo que sugiere Fran Verona - a nivel mundial deshabilitar repor de error ting es algo que nunca debes hacer. En producción, configure su propio controlador de errores y muestre un mensaje más bonito al usuario, y asegúrese de que el error esté registrado en algún lugar, pero nunca lo desactive por completo. Si se establece error_reporting en 0, PHP también deshabilitará el registro de errores.
- La solución Xeon06 es problemática porque está aplicando todo el controlador de errores de script para una pieza específica de código. El uso de su propio controlador de errores que simplemente ignora el error causa los mismos problemas que la solución de Fran.
posible duplicado de [try y catch a warning] (http://stackoverflow.com/questions/1241728/try-and-catch-a-warning) (Para una respuesta más amplia) –