почему тег <script>останавливает синтаксический анализ domdocument ()? - PullRequest
0 голосов
/ 10 сентября 2011

В следующем коде, казалось бы, безобидное введение тега 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("
"); ?>

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Трюк простой, измените loadHTML на loadXML с одним условием,
строка HTML должна быть всегда правильно сформирована

$dom->loadXML($html2);
0 голосов
/ 10 сентября 2011

Div не принадлежит внутри тега script.Javascript принадлежит внутри тега script.

Извлеките div из тега script, и все должно быть в порядке.

...