DOMDocument::loadHTMLFile

(PHP 5, PHP 7, PHP 8)

DOMDocument::loadHTMLFile β€” Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° HTML ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

ОписаниС

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

Ѐункция Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° filename. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ XML, HTML Π½Π΅ обязан Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ построСн для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

Для Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ соврСмСнной HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ вмСсто класса DOMDocument ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ классом Dom\HTMLDocument.

Ѐункция Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ стандарту HTML 4. ΠŸΡ€Π°Π²ΠΈΠ»Π° синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎ стандарту HTML 5, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ соврСмСнныС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹, содСрТат отличия. Π˜Ρ‚ΠΎΠ³ΠΎΠ²Π°Ρ структура DOM зависит ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для бСзопасной очистки HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ.

ПовСдСниС ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ зависит ΠΎΡ‚ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ libxml, это проявляСтся острСС ΠΏΡ€ΠΈ наступлСнии Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Ρ… условий ΠΈ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок. Π Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ, которая соотвСтствуСт спСцификации HTML5, Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Dom\HTMLDocument::createFromString() ΠΈΠ»ΠΈ Dom\HTMLDocument::createFromFile(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² PHP 8.4.

НапримСр, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ HTML-элСмСнты ΠΏΡ€ΠΈ встрСчС нСявно Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ элСмСнт. ΠŸΡ€Π°Π²ΠΈΠ»Π° автоматичСского закрытия Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… элСмСнтов Π² спСцификациях HTML 4 ΠΈ HTML 5 Π½Π΅ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ итоговая структура DOM, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²ΠΈΠ΄ΠΈΡ‚ класс DOMDocument, отличаСтся ΠΎΡ‚ DOM-структуры, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²ΠΈΠ΄ΠΈΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, Ρ‡Ρ‚ΠΎ создаёт риск Π²Π·Π»ΠΎΠΌΠ° ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΉ HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

filename

ΠŸΡƒΡ‚ΡŒ ΠΊ HTML-Ρ„Π°ΠΉΠ»Ρƒ.

options
ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Π˜Π›Π˜ (OR) констант ΠΎΠΏΡ†ΠΈΠΉ libxml.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния

Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΈΠ»ΠΈ false, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка.

Ошибки

Если Ρ‡Π΅Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ filename ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° пустая строка ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ» Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ содСрТит, Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрировано ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ гСнСрируСтся Π½Π΅ libxml, поэтому ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ функциями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок libxml.

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ нСкоррСктная HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ загруТаСтся, эта функция ΠΈΠ½ΠΎΠ³Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ошибки уровня E_WARNING ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… ошибок ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ функциями ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок модуля libxml.

Бписок измСнСний

ВСрсия ОписаниС
8.3.0 Π’Π΅ΠΏΠ΅Ρ€ΡŒ функция ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ логичСский (bool) Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.
8.0.0 ΠŸΡ€ΠΈ статичСском Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒΡΡ ошибка Error. Π Π°Π½Π΅Π΅ Π²Ρ‹Π΄Π°Π²Π°Π»Π°ΡΡŒ ошибка уровня E_DEPRECATED.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

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

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • DOMDocument::loadHTML() - Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° HTML ΠΈΠ· строки
  • DOMDocument::saveHTML() - БохраняСт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния Π² строку, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ HTML
  • DOMDocument::saveHTMLFile() - БохраняСт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния Π² Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ HTML
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 4 notes

up
14
onemanbanddan at gmail dot com ΒΆ
12 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
6
Mark Omohundro, ajamyajax dot com ΒΆ
17 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
-3
andy at carobert dot com ΒΆ
21 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 ΒΆ
11 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();
}