从 HTML 标记中删除样式属性

2022-08-30 10:25:49

我不太擅长正则表达式,但是对于PHP,我想从TinyMCE返回的字符串中的HTML标记中删除属性。style

所以改成香草。<p style="...">Text</p><p>Test</p>

我如何使用类似函数的东西来实现这一点?preg_replace()


答案 1

实用正则表达式将在所有合理的情况下解决此问题。应删除不是第一个捕获组的匹配项部分,如下所示:(<[^>]+) style=".*?"

$output = preg_replace('/(<[^>]+) style=".*?"/i', '$1', $input);

匹配一个后跟一个或多个“不”,直到我们来到和部分。使它甚至可以与 .将此匹配项替换为 ,即捕获的组。如果标记不包含 ,它将保持标记不变。<>spacestyle="..."/iSTYLE="..."$1style="..."


答案 2

像这样的东西应该有效(未经测试的代码警告):

<?php

$html = '<p style="asd">qwe</p><br /><p class="qwe">qweqweqwe</p>';

$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML($html);
libxml_use_internal_errors(false);

$domx = new DOMXPath($domd);
$items = $domx->query("//p[@style]");

foreach($items as $item) {
  $item->removeAttribute("style");
}

echo $domd->saveHTML();

推荐