web-dev-qa-db-fra.com

Supprimez la mise en forme masquée lorsque vous avez copié le texte MS Word dans TinyMCE

Environ un cinquième des articles que je reçois contient des quantités ridicules de formats cachés.

Par exemple, voici un extrait d'un article récent:

<!--[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"/>

Il s’agit en fait de 650 lignes, visualisez tout ici .

De plus, une mise en forme HTML aléatoire est ajoutée aux balises telles que:

<p class="MsoNormal">

Suite à recherche intéressante , il semble que cela se produise lorsque l'auteur colle le contenu de MS Word directement dans l'éditeur visuel TinyMCE. Et comme détaillé:

La mauvaise nouvelle n’est évidente que lorsque quelqu'un tente de visualiser cette page avec un autre navigateur et que la page est totalement mal formatée ou semble vide. Ironiquement, ce dernier scénario se produit le plus souvent lorsque la page est affichée dans Microsoft Internet Explorer [Bon!].

Un moyen de résoudre ce problème consiste peut-être à utiliser le bouton Paste from Word.

Cependant, ce n'est pas une solution viable lorsque 20% des soumissions présentent ce problème. Existe-t-il un moyen de supprimer cette mise en forme absurde lors du collage?

3
Christine Cooper

J'interprète la question comme signifiant que vous avez déjà un balisage Word dans votre message et que vous devez donc nettoyer cela via PHP. Si c'est le cas...

  1. Vous pouvez voir le code qui nettoie le contenu Word ici: http://core.trac.wordpress.org/browser/trunk/src/wp-includes/js/tinymce/plugins/paste/editor_plugin_src.js#L375 C'est Javascript. Avec un peu de travail, vous pourriez convertir cela en PHP.
  2. PHP Tidy , si disponible, va nettoyer cela.
  3. Je crois que HTML Tidy peut le faire.
  4. strip_tags va juste se débarrasser du code. (Testé)
  5. wp_kses s'en débarrassera en grande partie, mais il faudra quelques ajustements pour bien fonctionner, du moins comme l'indique mon test simple. Peut-être qu'avec les bons arguments, il peut faire ce que vous voulez.
3
s_ha_dum