diff --git a/ecrire/inc_documents.php3 b/ecrire/inc_documents.php3
index a25af7a302738a2c3f7203a7ffac38950499044b..468324adb8afc1a2b0e1e6161fc264fa40c558a2 100644
--- a/ecrire/inc_documents.php3
+++ b/ecrire/inc_documents.php3
@@ -393,9 +393,8 @@ function inserer_documents($letexte) {
 	static $pile = 0;
 	if (++$pile > 5) return '';
 
-	foreach (
-	preg_match_all(__preg_img, $letexte, $matches, PREG_SET_ORDER)
-	as $match) {
+	preg_match_all(__preg_img, $letexte, $matches, PREG_SET_ORDER);
+	foreach ($matches as $match) {
 		$type = strtoupper($match[1]);
 		if ($type == 'EMB')
 			$rempl = embed_document($match[2], $match[4]);
diff --git a/ecrire/inc_math.php3 b/ecrire/inc_math.php3
index 8a9cd0251e4a29784a6a87d1a9b3a46dd1ef1c1a..1ddfbf84a8b59682de201a0f5e71397966cecdef 100644
--- a/ecrire/inc_math.php3
+++ b/ecrire/inc_math.php3
@@ -96,7 +96,7 @@ function traiter_math($letexte, $source='') {
 			$echap = "\n<p class=\"spip\" style=\"text-align: center;\">".image_math($regs[1])."</p>\n";
 			$pos = strpos($texte_milieu, $regs[0]);
 			$texte_milieu = substr($texte_milieu,0,$pos)
-				. code_echappement($echap, 'div', $source)
+				. code_echappement($echap, $source)
 				. substr($texte_milieu,$pos+strlen($regs[0]));
 		}
 
@@ -105,7 +105,7 @@ function traiter_math($letexte, $source='') {
 			$echap = image_math($regs[1]);
 			$pos = strpos($texte_milieu, $regs[0]);
 			$texte_milieu = substr($texte_milieu,0,$pos)
-				. code_echappement($echap, 'span', $source)
+				. code_echappement($echap, $source)
 				. substr($texte_milieu,$pos+strlen($regs[0]));
 		}
 
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index cc438f1bdd6f4db565e09b3e9338b3fece84bd0b..5b239baa9bcb524bf6cb7b079f958d7b2748f2e5 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -55,6 +55,15 @@ if (!tester_variable('puce', "<img class='spip_puce' src='puce.gif' alt='-' />&n
 // Diverses fonctions essentielles
 //
 
+
+// XHTML - Preserver les balises-bloc
+define('_BALISES_BLOCS',
+	'div|pre|ul|li|blockquote|h[1-5r]|'
+	.'t(able|[rdh]|body|foot)|'
+	.'form|object|center|marquee|address|'
+	.'d[ltd]|script|noscript|map|del|ins|button|fieldset');
+
+
 // Ne pas afficher le chapo si article virtuel
 function nettoyer_chapo($chapo){
 	if (substr($chapo,0,1) == "="){
@@ -68,13 +77,16 @@ function nettoyer_chapo($chapo){
 // Echapper les les elements perilleux en les passant en base64
 //
 
-// Inserer dans le $texte le bloc base64 correspondant a $rempl, en remplacement
-// de $original ($mode=span|div ; au besoin en marquant une $source differente)
-function code_echappement($rempl, $mode='span', $source='') {
+// Creer un bloc base64 correspondant a $rempl ; au besoin en marquant
+// une $source differente ; le script detecte automagiquement si ce qu'on
+// echappe est un div ou un span
+function code_echappement($rempl, $source='') {
 	// Convertir en base64
 	$base64 = base64_encode($rempl);
 
 	// Ajouter le span/div d'echappement
+	$mode = preg_match(',<('._BALISES_BLOCS.')[>[:space:]]>,', $rempl) ?
+		'div' : 'span';
 	$nn = ($mode == 'div') ? "\n\n" : '';
 	return "<$mode class=\"base64$source\">$base64</$mode>$nn";
 }
@@ -143,7 +155,7 @@ function echappe_html($letexte, $source='', $no_transform=false) {
 		}
 
 		$letexte = str_replace($regs[0],
-			code_echappement($echap, $mode, $source),
+			code_echappement($echap, $source),
 			$letexte);
 	}
 
@@ -834,20 +846,14 @@ function paragrapher($letexte) {
 
 	if (preg_match(',<p[>[:space:]],i',$letexte)) {
 
-		// Preserver les balises-bloc (y compris "STOP P")
-		$blocs = 'STOP P|div|pre|ul|li|blockquote|h[1-5r]|'
-			.'t(able|[rdh]|body|foot)|'
-			.'form|object|center|marquee|address|'
-			.'d[ltd]|script|noscript|map|del|ins|button|fieldset';
-
 		// Ajouter un espace aux <p> et un "STOP P"
 		// transformer aussi les </p> existants en <p>, nettoyes ensuite
 		$letexte = preg_replace(',</?p(\s([^>]*))?'.'>,i', '<STOP P><p \2>',
 			'<p>'.$letexte.'<STOP P>');
 
-		// Fermer les paragraphes
+		// Fermer les paragraphes (y compris sur "STOP P")
 		$letexte = preg_replace(
-			',(<p\s.*)(</?('.$blocs.')[>[:space:]]),Uims',
+			',(<p\s.*)(</?(STOP P|'._BALISES_BLOCS.')[>[:space:]]),Uims',
 			"\n\\1</p>\n\\2", $letexte);
 
 		// Supprimer les marqueurs "STOP P"
@@ -955,7 +961,7 @@ function traiter_raccourcis($letexte) {
 			$insert = "$ouvre_ref$lien$num_note</a>$ferme_ref";
 
 			// on l'echappe
-			$insert = code_echappement($insert, 'span');
+			$insert = code_echappement($insert);
 
 			$appel = "$ouvre_note<a href=\"#nh$ancre\" name=\"nb$ancre\" class=\"spip_note\">$num_note</a>$ferme_note";
 		} else {
@@ -967,7 +973,7 @@ function traiter_raccourcis($letexte) {
 		if ($note_texte) {
 			if ($mes_notes)
 				$mes_notes .= "\n\n";
-			$mes_notes .= code_echappement($appel, 'span') . $note_texte;
+			$mes_notes .= code_echappement($appel) . $note_texte;
 		}
 
 		// dans le texte, mettre l'appel de note a la place de la note