<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://docs-old.ckeditor.com/index.php?action=history&amp;feed=atom&amp;title=FCKeditor_2.x%2FDevelopers_Guide%2FConfiguration%2FConfiguration_Options%2FCleanWordKeepsStructure</id>
		<title>FCKeditor 2.x/Developers Guide/Configuration/Configuration Options/CleanWordKeepsStructure - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://docs-old.ckeditor.com/index.php?action=history&amp;feed=atom&amp;title=FCKeditor_2.x%2FDevelopers_Guide%2FConfiguration%2FConfiguration_Options%2FCleanWordKeepsStructure"/>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options/CleanWordKeepsStructure&amp;action=history"/>
		<updated>2026-11-05T22:33:38Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.29.1</generator>

	<entry>
		<id>https://docs-old.ckeditor.com/index.php?title=FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options/CleanWordKeepsStructure&amp;diff=1290&amp;oldid=prev</id>
		<title>W.olchawa: New page: == CleanWordKeepsStructure == This setting controls the behavior in the Paste from Word dialog. It&#039;s default value is &#039;&#039;&#039;false&#039;&#039;&#039;, and that way it&#039;s trying to do the changes so the content...</title>
		<link rel="alternate" type="text/html" href="https://docs-old.ckeditor.com/index.php?title=FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options/CleanWordKeepsStructure&amp;diff=1290&amp;oldid=prev"/>
				<updated>2008-01-09T10:19:46Z</updated>
		
		<summary type="html">&lt;p&gt;New page: == CleanWordKeepsStructure == This setting controls the behavior in the Paste from Word dialog. It&amp;#039;s default value is &amp;#039;&amp;#039;&amp;#039;false&amp;#039;&amp;#039;&amp;#039;, and that way it&amp;#039;s trying to do the changes so the content...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== CleanWordKeepsStructure ==&lt;br /&gt;
This setting controls the behavior in the Paste from Word dialog. It&amp;#039;s default value is &amp;#039;&amp;#039;&amp;#039;false&amp;#039;&amp;#039;&amp;#039;, and that way it&amp;#039;s trying to do the changes so the content looks like it was in Word. If it&amp;#039;s switched to &amp;#039;&amp;#039;&amp;#039;true&amp;#039;&amp;#039;&amp;#039; then the routine will prefer to keep the HTML structure of the data instead of modifying it to keep the look as it was in word.&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FCKConfig.CleanWordKeepsStructure = true ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enabling this setting allows to keep a properly structured document as it was created in word as well as keep anchors and you can use CSS to make it look like it was in Word.&lt;br /&gt;
&lt;br /&gt;
Additionally you can specify your own function for the clean up adding it to the FCK object:&lt;br /&gt;
Define a FCK.CustomCleanWord function that accepts three parameters and returns the cleaned up string. Here&amp;#039;s an example using the default function that will be called in the Paste dialog (you should add your function for example with a plugin):&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// This function will be called from the PasteFromWord dialog (fck_paste.html)&lt;br /&gt;
// Input: oNode a DOM node that contains the raw paste from the clipboard&lt;br /&gt;
// bIgnoreFont, bRemoveStyles booleans according to the values set in the dialog&lt;br /&gt;
// Output: the cleaned string&lt;br /&gt;
function CleanWord( oNode, bIgnoreFont, bRemoveStyles )&lt;br /&gt;
{&lt;br /&gt;
	var html = oNode.innerHTML ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace(/&amp;lt;o:p&amp;gt;\s*&amp;lt;\/o:p&amp;gt;/g, &amp;#039;&amp;#039;) ;&lt;br /&gt;
	html = html.replace(/&amp;lt;o:p&amp;gt;.*?&amp;lt;\/o:p&amp;gt;/g, &amp;#039;&amp;amp;nbsp;&amp;#039;) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove mso-xxx styles.&lt;br /&gt;
	html = html.replace( /\s*mso-[^:]+:[^;&amp;quot;]+;?/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove margin styles.&lt;br /&gt;
	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
	html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*&amp;quot;/gi, &amp;quot;\&amp;quot;&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
	html = html.replace( /\s*TEXT-INDENT: 0cm\s*&amp;quot;/gi, &amp;quot;\&amp;quot;&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?&amp;quot;/gi, &amp;quot;\&amp;quot;&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?&amp;quot;/gi, &amp;quot;\&amp;quot;&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?&amp;quot;/gi, &amp;quot;\&amp;quot;&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /\s*tab-stops:[^;&amp;quot;]*;?/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
	html = html.replace( /\s*tab-stops:[^&amp;quot;]*/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove FONT face attributes.&lt;br /&gt;
	if ( bIgnoreFont )&lt;br /&gt;
	{&lt;br /&gt;
		html = html.replace( /\s*face=&amp;quot;[^&amp;quot;]*&amp;quot;/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
		html = html.replace( /\s*face=[^ &amp;gt;]*/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
		html = html.replace( /\s*FONT-FAMILY:[^;&amp;quot;]*;?/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Remove Class attributes&lt;br /&gt;
	html = html.replace(/&amp;lt;(\w[^&amp;gt;]*) class=([^ |&amp;gt;]*)([^&amp;gt;]*)/gi, &amp;quot;&amp;lt;$1$3&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove styles.&lt;br /&gt;
	if ( bRemoveStyles )&lt;br /&gt;
		html = html.replace( /&amp;lt;(\w[^&amp;gt;]*) style=&amp;quot;([^\&amp;quot;]*)&amp;quot;([^&amp;gt;]*)/gi, &amp;quot;&amp;lt;$1$3&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove empty styles.&lt;br /&gt;
	html =  html.replace( /\s*style=&amp;quot;\s*&amp;quot;/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /&amp;lt;SPAN\s*[^&amp;gt;]*&amp;gt;\s*&amp;amp;nbsp;\s*&amp;lt;\/SPAN&amp;gt;/gi, &amp;#039;&amp;amp;nbsp;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /&amp;lt;SPAN\s*[^&amp;gt;]*&amp;gt;&amp;lt;\/SPAN&amp;gt;/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove Lang attributes&lt;br /&gt;
	html = html.replace(/&amp;lt;(\w[^&amp;gt;]*) lang=([^ |&amp;gt;]*)([^&amp;gt;]*)/gi, &amp;quot;&amp;lt;$1$3&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /&amp;lt;SPAN\s*&amp;gt;(.*?)&amp;lt;\/SPAN&amp;gt;/gi, &amp;#039;$1&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /&amp;lt;FONT\s*&amp;gt;(.*?)&amp;lt;\/FONT&amp;gt;/gi, &amp;#039;$1&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove XML elements and declarations&lt;br /&gt;
	html = html.replace(/&amp;lt;\\?\?xml[^&amp;gt;]*&amp;gt;/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove Tags with XML namespace declarations: &amp;lt;o:p&amp;gt;&amp;lt;\/o:p&amp;gt;&lt;br /&gt;
	html = html.replace(/&amp;lt;\/?\w+:[^&amp;gt;]*&amp;gt;/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove comments [SF BUG-1481861].&lt;br /&gt;
	html = html.replace(/&amp;lt;\!--.*?--&amp;gt;/g, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /&amp;lt;(U|I|STRIKE)&amp;gt;&amp;amp;nbsp;&amp;lt;\/\1&amp;gt;/g, &amp;#039;&amp;amp;nbsp;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	html = html.replace( /&amp;lt;H\d&amp;gt;\s*&amp;lt;\/H\d&amp;gt;/gi, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove &amp;quot;display:none&amp;quot; tags.&lt;br /&gt;
	html = html.replace( /&amp;lt;(\w+)[^&amp;gt;]*\sstyle=&amp;quot;[^&amp;quot;]*DISPLAY\s?:\s?none(.*?)&amp;lt;\/\1&amp;gt;/ig, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove language tags&lt;br /&gt;
	html = html.replace( /&amp;lt;(\w[^&amp;gt;]*) language=([^ |&amp;gt;]*)([^&amp;gt;]*)/gi, &amp;quot;&amp;lt;$1$3&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
	// Remove onmouseover and onmouseout events (from MS Word comments effect)&lt;br /&gt;
	html = html.replace( /&amp;lt;(\w[^&amp;gt;]*) onmouseover=&amp;quot;([^\&amp;quot;]*)&amp;quot;([^&amp;gt;]*)/gi, &amp;quot;&amp;lt;$1$3&amp;quot;) ;&lt;br /&gt;
	html = html.replace( /&amp;lt;(\w[^&amp;gt;]*) onmouseout=&amp;quot;([^\&amp;quot;]*)&amp;quot;([^&amp;gt;]*)/gi, &amp;quot;&amp;lt;$1$3&amp;quot;) ;&lt;br /&gt;
&lt;br /&gt;
	if ( FCKConfig.CleanWordKeepsStructure )&lt;br /&gt;
	{&lt;br /&gt;
		// The original &amp;lt;Hn&amp;gt; tag send from Word is something like this: &amp;lt;Hn style=&amp;quot;margin-top:0px;margin-bottom:0px&amp;quot;&amp;gt;&lt;br /&gt;
		html = html.replace( /&amp;lt;H(\d)([^&amp;gt;]*)&amp;gt;/gi, &amp;#039;&amp;lt;h$1&amp;gt;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
		// Word likes to insert extra &amp;lt;font&amp;gt; tags, when using MSIE. (Wierd).&lt;br /&gt;
		html = html.replace( /&amp;lt;(H\d)&amp;gt;&amp;lt;FONT[^&amp;gt;]*&amp;gt;(.*?)&amp;lt;\/FONT&amp;gt;&amp;lt;\/\1&amp;gt;/gi, &amp;#039;&amp;lt;$1&amp;gt;$2&amp;lt;\/$1&amp;gt;&amp;#039; );&lt;br /&gt;
		html = html.replace( /&amp;lt;(H\d)&amp;gt;&amp;lt;EM&amp;gt;(.*?)&amp;lt;\/EM&amp;gt;&amp;lt;\/\1&amp;gt;/gi, &amp;#039;&amp;lt;$1&amp;gt;$2&amp;lt;\/$1&amp;gt;&amp;#039; );&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		html = html.replace( /&amp;lt;H1([^&amp;gt;]*)&amp;gt;/gi, &amp;#039;&amp;lt;div$1&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=&amp;quot;6&amp;quot;&amp;gt;&amp;#039; ) ;&lt;br /&gt;
		html = html.replace( /&amp;lt;H2([^&amp;gt;]*)&amp;gt;/gi, &amp;#039;&amp;lt;div$1&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=&amp;quot;5&amp;quot;&amp;gt;&amp;#039; ) ;&lt;br /&gt;
		html = html.replace( /&amp;lt;H3([^&amp;gt;]*)&amp;gt;/gi, &amp;#039;&amp;lt;div$1&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&amp;#039; ) ;&lt;br /&gt;
		html = html.replace( /&amp;lt;H4([^&amp;gt;]*)&amp;gt;/gi, &amp;#039;&amp;lt;div$1&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=&amp;quot;3&amp;quot;&amp;gt;&amp;#039; ) ;&lt;br /&gt;
		html = html.replace( /&amp;lt;H5([^&amp;gt;]*)&amp;gt;/gi, &amp;#039;&amp;lt;div$1&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=&amp;quot;2&amp;quot;&amp;gt;&amp;#039; ) ;&lt;br /&gt;
		html = html.replace( /&amp;lt;H6([^&amp;gt;]*)&amp;gt;/gi, &amp;#039;&amp;lt;div$1&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=&amp;quot;1&amp;quot;&amp;gt;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
		html = html.replace( /&amp;lt;\/H\d&amp;gt;/gi, &amp;#039;&amp;lt;\/font&amp;gt;&amp;lt;\/b&amp;gt;&amp;lt;\/div&amp;gt;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
		// Transform &amp;lt;P&amp;gt; to &amp;lt;DIV&amp;gt;&lt;br /&gt;
		var re = new RegExp( &amp;#039;(&amp;lt;P)([^&amp;gt;]*&amp;gt;.*?)(&amp;lt;\/P&amp;gt;)&amp;#039;, &amp;#039;gi&amp;#039; ) ;	// Different because of a IE 5.0 error&lt;br /&gt;
		html = html.replace( re, &amp;#039;&amp;lt;div$2&amp;lt;\/div&amp;gt;&amp;#039; ) ;&lt;br /&gt;
&lt;br /&gt;
		// Remove empty tags (three times, just to be sure).&lt;br /&gt;
		// This also removes any empty anchor&lt;br /&gt;
		html = html.replace( /&amp;lt;([^\s&amp;gt;]+)(\s[^&amp;gt;]*)?&amp;gt;\s*&amp;lt;\/\1&amp;gt;/g, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
		html = html.replace( /&amp;lt;([^\s&amp;gt;]+)(\s[^&amp;gt;]*)?&amp;gt;\s*&amp;lt;\/\1&amp;gt;/g, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
		html = html.replace( /&amp;lt;([^\s&amp;gt;]+)(\s[^&amp;gt;]*)?&amp;gt;\s*&amp;lt;\/\1&amp;gt;/g, &amp;#039;&amp;#039; ) ;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return html ;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>W.olchawa</name></author>	</entry>

	</feed>