В следующем коде, казалось бы, безобидное введение тега script, содержащего пустой div, приводит к сбою синтаксического анализа. (Использование пустого тега script не вызывает проблем.) $ Html1 обрабатывается правильно, получая значения двух диапазонов:
Array
(
[0] => test1
[1] => test2
)
, тогда как $ html2 не анализируется должным образом, получая только диапазон, предшествующий тегу script:
Array
(
[0] => test1
)
Почему это происходит? При включенных ошибках я получаю две ошибки: «Неожиданный конечный тег: скрипт» и «Неожиданный конечный тег: div», но я не знаю, почему они неожиданные.
<code><?php
$html1 = <<<EOT
<div class="productList">
<span>test1</span>
<div></div>
<span>test2</span>
</div>
EOT;
$html2 = <<<EOT
<div class="productList">
<span>test1</span>
<script>
<div></div>
</script>
<span>test2</span>
</div>
EOT;
libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadhtml($html1);
$xpath = new DOMXPath($dom);
$titles_nodeList = $xpath->query('//div[@class="productList"]/span');
foreach ($titles_nodeList as $title) {
$titles[] = $title->nodeValue;
}
echo("<p>titles without script tag and div</p>");
echo("<pre>");
print_r($titles);
echo("
");
переменные не установлены ($ наименования);
$ Dom-> loadhtml ($ html2);
$ xpath = new DOMXPath ($ dom);
$ title_nodeList = $ xpath-> query ('// div [@ class = "productList"] / span');
foreach ($ title_nodeList как $ title) {
$ title [] = $ title-> nodeValue;
}
echo ("
заголовки с тегом script и div
");
эхо ( "
");
print_r($titles);
echo("
");
?>