Index: CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5262)
+++ CKEditor/trunk/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5273)
@@ -12,4 +12,28 @@
 	var dialog,
 		lang = editor.lang.specialChar;
+	
+	var insertSpecialChar = function ( specialChar )
+	{
+		var selection = editor.getSelection(),
+			ranges	  = selection.getRanges(),
+			range, textNode;
+				
+		editor.fire( 'saveSnapshot' );
+		
+		for ( var i = 0, len = ranges.length ; i < len ; i++ )
+		{
+			range = ranges[ i ];
+			range.deleteContents();
+			
+			textNode =  CKEDITOR.dom.element.createFromHtml( specialChar );
+			range.insertNode( textNode );
+		}
+		
+		range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END );
+		range.select();
+		
+		editor.fire( 'saveSnapshot' );
+	};
+	
 	var onChoice = function( evt )
 	{
@@ -24,5 +48,10 @@
 			target.removeClass( "cke_light_background" );
 			dialog.hide();
-			editor.insertHtml( value );
+			
+			// Firefox has bug on insert chars into a element use its own API. (#5170)
+			if ( CKEDITOR.env.gecko )
+				insertSpecialChar( value );
+			else
+				editor.insertHtml( value );
 		}
 	};
