0

我有一些非常混乱的 HTML,带有很多spans 和其他标签。

我试图只保留<span style="font-weight: bold">同时删除其他此类跨度标签。

到目前为止我有这个:

$content = strip_tags($content, '<br>,<quote>,<code>,<pre>,<ul>,<li>,<ol>,<span>');

我想删除<span>,因为它span全局添加了所有其他 s,我只想要其中的spans font-style。我怎样才能做到这一点?

4

1 回答 1

2

strip_tags不能这样做。

看看HTML Purifier。它专为这个用例而设计。你可以给它一个允许的标签和属性的白名单。它还具有基本的 CSS 解析,允许您将CSS 属性列入白名单和黑名单

在这种情况下,您可能会执行以下操作:

// This has not been tested, but should work
$configuration->set('HTML.Allowed', 'br,quote,code,pre,ul,li,ol,span[style]');
$configuration->set('CSS.AllowedProperties', 'font-weight');

现在,您仍然会留下一些额外的跨度标签。你建议你只是想让它们消失。这会有点粘。您想使用 DOM 操作工具来查找每个无用的跨度,捕获内容,删除跨度,然后将内容插入跨度所在的位置。 phpQuery已经被指出,Simple HTML DOM也应该可以解决问题。PHP 自己的DOM 扩展也可以做到这一点,但它会更麻烦

于 2012-12-15T19:18:36.963 回答