DomCrawler正在删除部分HTML

时间:2017-07-25 13:31:57

标签: symfony domcrawler

当我在没有DomCrawler的情况下获取内容时,我会获得带有@click等自定义标签的html,但是当我使用$this->crawler->filter('something')->html()时,DomCrawler正在移除我的@click标签。

这里是一个不使用DomCrawler的例子:

enter image description here

这里使用的是DomCrawler:

enter image description here

正如你所看到的,DomCrawler正在删除所有的@clicks,我怎么能阻止它呢?

1 个答案:

答案 0 :(得分:0)

不幸的是,你做不到。 DomCrawler在引擎盖下使用DOMDocument,不允许使用“@click”。也:

  

DomCrawler会尝试自动修复您的HTML以符合官方规范。

要禁用它的修饰符是LIBXML_HTML_NOIMPLIED,它不在DomCrawler的addHmlContent方法中使用:

//... Symfony\Component\DomCrawler\Crawler.php
$dom->loadHTML($content);
// ...

甚至在你的情况下调用@$dom->loadHTML($content, LIBXML_HTML_NOIMPLIED);也不行。

示例:

$html = <<<TEST
   <html>
       <div class="test" @click="something"></div>
   </html>
TEST;
    dump($html);
    //<html>\n
    //    <div class="test" @click="something"></div>\n
    //</html>

    // Symfony Crawler
    $crawler = new \Symfony\Component\DomCrawler\Crawler();
    $crawler->addHtmlContent($html);
    dump($crawler->html());
    //<body>\n
    //    <div class="test"></div>\n
    //</body>

    // Custom crawler with LIBXML_HTML_NOIMPLIED
    $crawler = new \MyCrawler\Crawler();
    $crawler->addHtmlContent($html);
    dump($crawler->html());
    //  <div class="test"></div>