当我在没有 DomCrawler 的情况下获得内容时,我会获得带有 @click 等自定义标签的 html,但是当我使用$this->crawler->filter('something')->html()
DomCrawler 时,我会删除我的 @click 标签。
这是一个不使用 DomCrawler 的示例:
这里使用的是 DomCrawler:
如您所见,DomCrawler 正在删除所有@clicks,我该如何阻止它?
当我在没有 DomCrawler 的情况下获得内容时,我会获得带有 @click 等自定义标签的 html,但是当我使用$this->crawler->filter('something')->html()
DomCrawler 时,我会删除我的 @click 标签。
这是一个不使用 DomCrawler 的示例:
这里使用的是 DomCrawler:
如您所见,DomCrawler 正在删除所有@clicks,我该如何阻止它?
不幸的是,你不能。DomCrawler在后台使用DOMDocument并且不允许“@click”。还:
DomCrawler 将尝试自动修复您的 HTML 以匹配官方规范。
禁用此功能的修饰符是 LIBXML_HTML_NOIMPLIED,它在addHmlContent
DomCrawler 的方法中未使用:
//... 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>