symfony DomCrawler正在删除部分html

csbfibhn  于 2023-02-16  发布在  其他
关注(0)|答案(2)|浏览(118)

当我在没有DomCrawler的情况下获得内容时,我会获得带有自定义标记(如@click)的html,但当我使用$this->crawler->filter('something')->html()时,DomCrawler会删除我的@click标记。
下面是一个不使用DomCrawler的示例:

下面是使用DomCrawler的示例:

正如您所看到的,DomCrawler正在删除所有的@点击,我该如何停止呢?

rn0zuynd

rn0zuynd1#

很遗憾,您不能。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>
jgwigjjp

jgwigjjp2#

您可以将@click替换为x-on:click,这具有完全相同的效果,同时也是有效的HTML。

相关问题