Index: /Users/denis/Sites/sem-pro/wp-includes/formatting.php
===================================================================
--- /Users/denis/Sites/sem-pro/wp-includes/formatting.php	(revision 558)
+++ /Users/denis/Sites/sem-pro/wp-includes/formatting.php	(working copy)
@@ -118,9 +118,11 @@
 	$pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
 	// Space things out a little
 	$allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
+	$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
+	while ( preg_match("/(<[^>\n]*)\n+/", $pee) )
+		$pee = preg_replace("/(<[^>\n]*)\n+/", "$1 ", $pee); // eliminate carriage returns in tags
 	$pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
 	$pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
-	$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
 	if ( strpos($pee, '<object') !== false ) {
 		$pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed
 		$pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee);
