Symfony DomCrawler获取没有属性/样式的HTML

ecbunoof  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(109)

我需要一种方法来从没有属性(类/样式)的电子邮件HTML。
目前正在尝试以下操作:

$crawler = new Crawler();
$crawler->addHtmlContent($mail->textHtml);

$html = '';
$nodes = $crawler->filter('body > *'); //only stuff inside body

foreach ($crawler as $domElement) {
    //remove somehow class+styles ?
    $html .= $domElement->ownerDocument->saveHTML($domElement);
}

echo $html; //outputs everything inside body (currently with attributes)

正如我已经读到的许多问题一样,regex并不是一个很好的解决方案,因为它可能会破坏东西。

mrfwxfqh

mrfwxfqh1#

我知道这个问题是从一段时间前,但它仍然是相关的,我想提供一个解决方案,可以帮助其他人谁遇到这个问题。
要使用Symfony DomCrawler从HTML内容中删除属性(类/样式),可以使用DOMElement的removeAttribute函数。下面是一个代码片段:

foreach ($crawler as $domElement) {
    $domElement->removeAttribute('class');
    $domElement->removeAttribute('style');
}

$html = $crawler->outerHtml();

一些IDE(如PHPStorm)可能会显示警告,“Potentially polymorphic call. DOMNode does not have members in its hierarchy”。但是,您可以安全地忽略此警告,原因如下:

  • DOMNode是DOMElement的超类(子类),DOMElement有removeAttribute函数。
  • 当使用foreach循环Crawler对象时,$domElement项类型为DOMNode|mixed,但也可能是DOMElement。要处理此问题,可以使用instanceof检查,如下所示:
if ($domElement instanceof \DOMElement) {
    $domElement->removeAttribute('style');
}

相关问题