PHP清理粘贴的Microsoft输入

PHP清理粘贴的Microsoft输入,php,ms-word,tinymce,user-input,Php,Ms Word,Tinymce,User Input,我有一个网站,用户可以使用定制的TinyMCE实现发布内容(如论坛、评论等)。他们中的许多人喜欢从Word中复制和粘贴,这意味着他们的输入常常伴随着大量相关的MS内联格式 我不能仅仅摆脱,因为TinyMCE的一些格式依赖于span标记,而且我不能(也不想)强迫上述用户使用TinyMCE的“从Word粘贴”功能(这似乎并不太好) 有谁知道一个库/类/函数可以帮我处理这个问题?这一定是一个常见的问题,尽管我找不到确切的答案。我最近一直在想,一系列寻找MS特定模式的蛮力正则表达式可能会奏效,但我不想重

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

我不能仅仅摆脱
,因为TinyMCE的一些格式依赖于span标记,而且我不能(也不想)强迫上述用户使用TinyMCE的“从Word粘贴”功能(这似乎并不太好)

有谁知道一个库/类/函数可以帮我处理这个问题?这一定是一个常见的问题,尽管我找不到确切的答案。我最近一直在想,一系列寻找MS特定模式的蛮力正则表达式可能会奏效,但我不想重写一些可能已经可用的东西,除非我必须这样做

此外,修复卷曲引号、em破折号等也不错。我现在有自己的东西要做,但我真的很想找到一个MS转换过滤器来管理它们。

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

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

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

该网站在从Word转换方面做得很好。我在PHP中使用它来处理一些遗留的HTML,到目前为止它工作得很好(结果非常干净
code)。当然,作为一个外部服务,在像您的案例这样的在线处理中使用它是不好的


如果您尝试了它,它会带来400多个错误,请尝试使用first过滤HTML。

在我的例子中,有一种模式。不需要的部分总是从

<!-- [if gte mso 9]>

因此,我的解决方案是在这一块之前和之后删掉所有内容:

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

$array=explode(“在我的例子中,这很好:

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

与其尝试提取您不想要的东西,例如嵌入式word xml,您可以只指定允许的标记。

谢谢,但这两种标记似乎都不能处理MS格式,这正是我最感兴趣的。HTML净化器计划在3.5版中使用,但需要“研究”“。然后我建议您切换到可以处理单词输入的fckeditor。更新了我的答案。嗯。我以前出于其他一些原因更喜欢TinyMCE而不是fckeditor,但这可能会影响我。感谢您的提示&很高兴接受我的+1:)请注意,(如果我切换)我仍然需要清理所有已经发布的垃圾…还要注意,不再支持FCKEditor,现代浏览器也会有问题,所以你应该改用CKEditor。
$text = strip_tags($text, '<p><a><em><span>');