web-dev-qa-db-ja.com

ユーザーがMS WordからTinyMCEにテキストを貼り付けたときに隠しフォーマットを削除する

私が受け取った投稿の約5分の1には、途方もない量の隠されたフォーマットが含まれています。

たとえば、最近の投稿の一部です。

<!--[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行です、 ここで全部見る

また、ランダムなHTMLフォーマットが以下のようなタグに追加されています。

<p class="MsoNormal">

さらに 興味深い研究 によると、これは著者がMS WordのコンテンツをTinyMCEビジュアルエディタに直接貼り付けたときに発生するようです。そして詳述したように:

悪いニュースは、誰かがそのページを別のブラウザで表示しようとしたときに、そのページが完全にフォーマットされていないか空白に見えるまで明らかになりません。皮肉なことに、この後者のシナリオは、ページがMicrosoft Internet Explorerで表示されているときに最も頻繁に発生します。

それを解決する方法はPaste from Wordボタンを使うことかもしれません。

ただし、投稿の20%にこの問題がある場合、それは実行可能な解決策ではありません。貼り付け時にこのナンセンスな書式を削除する方法はありますか?

3

私はあなたの投稿に既にWordのマークアップがあるので、PHPでそれを片付ける必要があることを意味すると私は質問を解釈しています。もしそうなら...

  1. ここでWordのコンテンツを整理するコードを見ることができます: http://core.trac.wordpress.org/browser/trunk/src/wp-includes/js/tinymce/plugins/paste/editor_plugin_src.js#L375 それはJavascriptです。いくつかの仕事で、あなたはそれをPHPに変換することができます。
  2. PHP Tidy 、利用可能な場合、それをクリーンアップします。
  3. 私は HTML Tidy )ができると信じています。
  4. strip_tagsはコードを削除するだけです。 (テスト済み)
  5. wp_ksesはそれの多くを取り除きますが、少なくとも私の簡単なテストで示されるように、うまくいくようにいくらかの微調整をとるでしょう。正しい引数を使えば、あなたが望むことができるかもしれません。
3
s_ha_dum