当用户将文本从MS Word粘贴到TinyMCE时删除隐藏的格式

时间:2013-09-13 作者:Christine Cooper

在我收到的投稿中,大约有五分之一的投稿包含了荒谬的隐藏格式。

例如,以下是最近一篇帖子中的一些内容:

<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="&#45;-"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
实际上是650行,view it all here.

此外,还将随机HTML格式添加到标记中,如:

<p class="MsoNormal">
在进一步interesting research, 当作者将MS Word中的内容直接粘贴到TinyMCE可视化编辑器中时,似乎会发生这种情况。具体如下:

坏消息并不明显,除非有人尝试使用其他浏览器查看该页面,而该页面完全格式错误或显示为空白。具有讽刺意味的是,在Microsoft Internet Explorer中查看页面时,经常会出现后一种情况[很好!]。

解决此问题的一种方法可能是使用Paste from Word 按钮

然而,当20%的提交文件都存在此问题时,这并不是一个可行的解决方案。有没有什么方法可以在粘贴时去掉这些无意义的格式?

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我将这个问题解释为,您的帖子中已经有了Word标记,因此您需要通过PHP清理它。如果是这样。。。

您可以在此处看到清理Word内容的代码:http://core.trac.wordpress.org/browser/trunk/src/wp-includes/js/tinymce/plugins/paste/editor_plugin_src.js#L375这就是Javascript。通过一些工作,您可以将其转换为PHP

  • PHP Tidy, 如果可以的话,我会把它清理干净HTML Tidy 我能做到
  • strip_tags 只会删除代码。(已测试)wp_kses 将去掉大部分,但需要一些调整才能很好地工作,至少我的简单测试表明了这一点。也许有了正确的论据,它可以做你想做的事
  • SO网友:pixeline

    这里有一个“零开发解决方案”:我会告诉您的用户,如果他们粘贴Word中的内容,他们应该粘贴到html选项卡,而不是“视觉”选项卡。之后,他们可以切换到“视觉”选项卡。这将仅粘贴可见文本,而不是其标记。

    结束

    相关推荐

    linking pic previews to posts

    该网站是一个关于212个孩子的主题,位于www.travelwithcastle。com公司我想将帖子预览(主页上)上的图片链接到实际帖子——现在,当我单击图片时,它没有链接。仅链接标题文本。我喜欢这样,我还想链接图片预览。有人知道我怎么做吗?我的猜测是,这与我如何在内容中编写永久链接有关。php文件,但我不能对此发誓。为此,我的内容如下。php代码的当前外观。<?php /** * The default template for displaying content. Used