diff --git a/ecrire/inc/texte_mini.php b/ecrire/inc/texte_mini.php
index ed11769fbffb297e6742aeebdbebbae7072b628c..24ec4d8e95854f12823fac02b79037b44b0bbff6 100644
--- a/ecrire/inc/texte_mini.php
+++ b/ecrire/inc/texte_mini.php
@@ -109,6 +109,26 @@ function traiter_echap_html_dist($regs) {
 	return $regs[3];
 }
 
+// Echapper les <pre>...</ pre>
+function traiter_echap_pre_dist($regs) {
+	// echapper les <code> dans <pre>
+	$pre = $regs[3];
+
+	// echapper les < dans <code>
+	// on utilise _PROTEGE_BLOCS pour simplifier le code et la maintenance, mais on est interesse que par <code>
+	if (strpos($pre, "<") !== false
+		and preg_match_all(_PROTEGE_BLOCS, $pre, $matches, PREG_SET_ORDER)){
+
+		foreach ($matches as $m){
+			if ($m[1]==='code'){
+				$code = "<code" . $m[2] . ">" . spip_htmlspecialchars($m[3]) . "</code>";
+				$pre = str_replace($m[0], $code, $pre);
+			}
+		}
+	}
+	return "<pre>$pre</pre>";
+}
+
 // Echapper les <code>...</ code>
 // https://code.spip.net/@traiter_echap_code_dist
 function traiter_echap_code_dist($regs) {
@@ -166,7 +186,7 @@ function traiter_echap_script_dist($regs) {
 	return $regs[0];
 }
 
-define('_PROTEGE_BLOCS', ',<(html|code|cadre|frame|script|style)(\s[^>]*)?>(.*)</\1>,UimsS');
+define('_PROTEGE_BLOCS', ',<(html|pre|code|cadre|frame|script|style)(\s[^>]*)?>(.*)</\1>,UimsS');
 
 // - pour $source voir commentaire infra (echappe_retour)
 // - pour $no_transform voir le filtre post_autobr dans inc/filtres