2008-12-18 93 views
9

我有一个网站,用户可以使用自定义的TinyMCE实现发布的东西(如在论坛,评论等)。他们中的很多人喜欢从Word复制&粘贴,这意味着他们的输入通常会伴随大量关联的MS内联格式。PHP清理粘贴微软输入

我不能摆脱<span whatever>,因为TinyMCE依赖span标签进行一些格式化,我不能(也不想)强制用户使用TinyMCE的“从Word粘贴”功能(这似乎并不能很好地工作)。

任何人都知道图书馆/类/功能,将为我照顾这个?这一定是一个常见问题,尽管我找不到任何明确的答案。我最近一直在想,寻找特定于MS的模式的一系列蛮力正则表达式可能会诀窍,但我不想重写一些可能已经可用的东西,除非我必须这样做。

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

回答

7

HTML Purifier将创建符合标准的标记并筛选出许多可能的攻击(如XSS)。

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

如果那些帮助不到你,我建议你切换到具有此功能built-in的FCKEditor。

+0

谢谢,但这些都不符合MS格式,这是我主要感兴趣的.HTML Purifier已计划使用3.5版本,但需要“必要的研究”。 – da5id 2008-12-18 21:48:06

0

该网站http://word2cleanhtml.com/在从Word转换中做得很好。我在PHP中使用它通过报废,处理一些遗留的HTML,直到现在它工作得很好(结果是非常干净的<p>, <b>代码)。当然,作为一种外部服务,在您的案例中使用它进行在线处理并不好。

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

0

在我的情况下,有一种模式。不需要的部分总是开始

<!-- [if gte mso 9]> 

并最终由

<![endif]--> 

所以我的解决方案是之前和该块后切出一切:

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

在我而言,这工作得很好:

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

而不是试图拉出你不想要的东西,如嵌入式单词xml,你可以指定你是允许的标签。