PHP来清理粘贴的Microsoft输入

时间:2008-12-18 21:25:37

标签: php ms-word tinymce user-input

我有一个网站,用户可以使用TinyMCE的自定义实现发布内容(如论坛,评论等)。很多人都喜欢复制和放弃从Word粘贴,这意味着他们的输入通常伴随着大量相关的MS内联格式。

我不能摆脱<span whatever>,因为TinyMCE依赖于span标签的某些格式,我不能(也不想)强迫所述用户使用TinyMCE的“粘贴”从Word“功能(无论如何看起来效果不佳)。

任何人都知道一个库/类/功能会为我处理这个问题吗?它必定是一个常见的问题,尽管我找不到任何确定的东西。我最近一直在想,一系列寻找MS特定模式的暴力正则表达式可能会成功,但我不想重新编写可能已经可用的东西,除非我必须这样做。

此外,修复卷曲引号,em-dashes等也会很好。我现在有自己的东西,但我真的只想找到一个MS转换过滤器来统治它们。

4 个答案:

答案 0 :(得分:7)

HTML Purifier将创建符合标准的标记并过滤掉许多可能的攻击(例如XSS)。

对于不需要XSS过滤的更快清理,我使用PECL扩展Tidy,它是Tidy HTML实用程序的绑定。

如果这些对您没有帮助,我建议您切换到具有此功能的built-in的FCKEditor。

答案 1 :(得分:0)

网站http://word2cleanhtml.com/在从Word转换方面做得很好。我通过报废在PHP中使用它来处理一些遗留的HTML,直到现在它工作得很好(结果是非常干净的<p>, <b>代码)。当然,作为一种外部服务,在网上处理中使用它并不像你的情况那样好。

如果您尝试它并且会带来400多个错误,请尝试先使用Tidy过滤HTML。

答案 2 :(得分:0)

就我而言,有一种模式。不需要的部分始终以

开头
<!-- [if gte mso 9]>

并以

结束
<![endif]-->

所以我的解决方案是在这个块之前和之后删除所有内容:

$array = explode("<!-", $string, 2);
$begin = $array[0];
$end=substr(strrchr($string,'[endif]-->'),10);
echo $begin.$end;

答案 3 :(得分:0)

就我而言,这很好用:

$text = strip_tags($text, '<p><a><em><span>');

您可以只指定您允许的标记,而不是尝试提取您不想要的内容,例如嵌入式字词xml。