1

我在客户的网站上安装了 CKeditor,允许他们使用 WYSIYG 编辑器输入一些文本。它大部分被锁定,只允许粗体、斜体、无序列表等。

例如,我还通过HTML 净化器运行用户提交的 HTML ,以确保他们不会变得聪明并开始尝试添加表格。例如,限制他们可以为 XSS 问题输入的内容也是一个好主意。

我只是查看了 CKeditor/HTML Purifier 组合产生的一些输出,并看到了这种暴行……

<p>
    <span style="font-size:11px;"><br /></span></p>

无论如何我可以配置 HTML Purifier 或使用其他东西来删除没有文本节点的元素吗?它显然需要从最新的后代开始,然后向上运行 DOM 树,删除没有带有文本节点的元素的最父。

假设该标记中从来没有任何仅表示的元素,这种方法是否有任何边缘情况?没有我能想到的自闭合元素(例如图像、输入元素等)。

4

1 回答 1

0

您可以使用 PHP 的strip_tags()功能:

http://php.net/manual/en/function.strip-tags.php

这将删除所有 html-tags,除了您作为第二个参数输入的那些。在您的情况下,仅允许粗体、斜体和无序的 lis 是:

$text = strip_tags($text, '<b><i><ul>');

当然在这之后仍然可以有空的,但你肯定可以用这个去掉spanandp标签。

于 2010-08-10T08:44:20.353 回答