PHP 8.5.0 Alpha 2 available for testing

DOMDocument::loadHTMLFile

(PHP 5, PHP 7, PHP 8)

DOMDocument::loadHTMLFile Carga HTML desde un fichero

Descripción

public DOMDocument::loadHTMLFile(string $filename, int $options = 0): bool

Esta función analiza el documento HTML del fichero llamado filename. A diferencia de cargar XML, HTML no tiene que estar bien formado para cargarse.

Advertencia

Utilice Dom\HTMLDocument para analizar y tratar el HTML moderno en lugar de DOMDocument.

Esta función analiza la entrada utilizando un analizador HTML 4. Las reglas de análisis del HTML 5, que son las utilizadas por los navegadores web modernos, son diferentes. Según la entrada, esto puede resultar en una estructura DOM diferente. Por lo tanto, esta función no puede ser utilizada de forma segura para la sanitización del HTML.

El comportamiento durante el análisis del HTML puede depender de la versión de libxml que se utilice, especialmente en lo que respecta a los casos límite y el manejo de errores. Para un análisis conforme a la especificación HTML5, utilice Dom\HTMLDocument::createFromString() o Dom\HTMLDocument::createFromFile(), añadidos en PHP 8.4.

Por ejemplo, algunos elementos HTML cerrarán implícitamente un elemento padre cuando sean encontrados. Las reglas de cierre automático de elementos padres difieren entre HTML 4 y HTML 5, y por lo tanto, la estructura DOM que DOMDocument ve puede ser diferente de la que un navegador web ve, lo que puede permitir potencialmente a un atacante comprometer el HTML resultante.

Parámetros

filename

La ruta al fichero HTML.

options

Operación de 'OR' lógica de las constantes de opción libxml.

Valores devueltos

Esta función retorna true en caso de éxito o false si ocurre un error.

Errores/Excepciones

Si se pasa una cadena vacía a filename o se nombra un fichero vacío, se generará una advertencia. Esta advertencia no es generada por libxml y no puede ser controlada utilizando las funciones de manejo de errores de libxml.

Aunque el HTML mal-formado debería cargarse con éxito, esta función puede generar una advertencia de tipo E_WARNING cuando encuentre una mala etiqueta. Las funciones de manejo de errores libxml pueden ser utilizadas para manejar estos errores.

Historial de cambios

Versión Descripción
8.3.0 Esta función ahora tiene un tipo de retorno bool tentativo.
8.0.0 Llamar a esta función de forma estática ahora lanzará un Error. Anteriormente, se emitía un E_DEPRECATED.

Ejemplos

Ejemplo #1 Creando un Documento

<?php
$doc
= new DOMDocument();
$doc->loadHTMLFile("filename.html");
echo
$doc->saveHTML();
?>

Ver también

add a note

User Contributed Notes 4 notes

up
14
onemanbanddan at gmail dot com
11 years ago
The options for surpressing errors and warnings will not work with this as they do for loadXML()
e.g.
<?php
$doc
->loadHTMLFile($file, LIBXML_NOWARNING | LIBXML_NOERROR);
?>
will not work.
you must use:
<?php
libxml_use_internal_errors
(true);
$doc->loadHTMLFile($file);
?>
and handle the exceptions as neccesarry.
up
5
Mark Omohundro, ajamyajax dot com
16 years ago
<?php
// try this html listing example for all nodes / includes a few getElementsByTagName options:

$file = $DOCUMENT_ROOT. "test.html";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);

// example 1:
$elements = $doc->getElementsByTagName('*');
// example 2:
$elements = $doc->getElementsByTagName('html');
// example 3:
//$elements = $doc->getElementsByTagName('body');
// example 4:
//$elements = $doc->getElementsByTagName('table');
// example 5:
//$elements = $doc->getElementsByTagName('div');

if (!is_null($elements)) {
foreach (
$elements as $element) {
echo
"<br/>". $element->nodeName. ": ";

$nodes = $element->childNodes;
foreach (
$nodes as $node) {
echo
$node->nodeValue. "\n";
}
}
}
?>
up
-4
andy at carobert dot com
20 years ago
This puts the HTML into a DOM object which can be parsed by individual tags, attributes, etc.. Here is an example of getting all the 'href' attributes and corresponding node values out of the 'a' tag. Very cool....

<?php
$myhtml
= <<<EOF
<html>
<head>
<title>My Page</title>
</head>
<body>
<p><a href="/mypage1">Hello World!</a></p>
<p><a href="/mypage2">Another Hello World!</a></p>
</body>
</html>
EOF;

$doc = new DOMDocument();
$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach (
$tags as $tag) {
echo
$tag->getAttribute('href').' | '.$tag->nodeValue."\n";
}
?>

This should output:

/mypage1 | Hello World!
/mypage2 | Another Hello World!
up
-5
qrworld.net
10 years ago
In this post http://softontherocks.blogspot.com/2014/11/descargar-el-contenido-de-una-url_11.html I found a simple way to get the content of a URL with DOMDocument, loadHTMLFile and saveHTML().

function getURLContent($url){
$doc = new DOMDocument;
$doc->preserveWhiteSpace = FALSE;
@$doc->loadHTMLFile($url);
return $doc->saveHTML();
}
To Top