使用strip_tags()仅显示一些内联样式

时间:2012-12-15 13:20:05

标签: php html-parsing strip-tags

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

我正在尝试仅保留<span style="font-weight: bold">,同时删除其他此类span标记。

到目前为止,我有这个:

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

我想删除<span>,因为它会全局添加所有其他span,我只希望其中包含span的{​​{1}}。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

strip_tags无法做到这一点。

看看HTML Purifier。它专为此用例而设计。您可以为其提供标签和属性的白名单。它还具有基本的CSS解析功能,允许您whitelist and blacklist CSS properties

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

// 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');

现在,你仍然会留下一些额外的span标签。你已经建议你只是想让它们消失。这会有点粘。您希望使用DOM操作工具来查找每个无用的跨度,捕获内容,删除跨度,然后插入跨度所在的内容。已经指出了phpQuerySimple HTML DOM也应该这样做。 PHP自己的DOM extension也可以这样做,但它会更多地 更多的熊。