diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index 20a05742139b87e33143220971ae79e335132adc..8157b2817f13a258e93e896806b56883fe42e83b 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -219,27 +219,24 @@ function echappe_html($letexte, $source='SOURCEPROPRE', $no_transform=false) {
 
 // Traitement final des echappements
 function echappe_retour($letexte, $les_echap, $source='') {
-  $cherche = "@@SPIP_$source";
-  $n = strlen($cherche);
-  $debut = '';
-  while(($pos = strpos($letexte, $cherche)) !== false) {
-    ereg("^([0-9]+)@@(.*)$",substr($letexte,$pos+$n),$regs);
-    $rempl = $les_echap[$regs[1]];
-# si $rempl est un tableau, c'est le résultat (cf echappe_html) de eregi sur :
+	$expr = ",@@SPIP_$source([0-9]+)@@,";
+	if (preg_match_all($expr, $letexte, $regs, PREG_SET_ORDER)) {
+		foreach ($regs as $reg) {
+			$rempl = $les_echap[$reg[1]];
+# si $rempl est un tableau, c'est le resultat (cf echappe_html) de eregi sur :
 # <(IMG|DOC|EMB)([0-9]+)(\|([^\>]*))?
-    if (is_array($rempl))
-	  {
-		    include_ecrire("inc_documents.php3");
-		    $type = strtoupper($rempl[1]);
-		    if ($type == 'EMB')
-		      $rempl = embed_document($rempl[2], $rempl[4]);
-		    else
-		      $rempl = integre_image($rempl[2], $rempl[4], $type);
-	  }
-    $debut .= substr($letexte,0,$pos) . $rempl;
-    $letexte = $regs[2];
-  }
-  return $debut . $letexte;
+			if (is_array($rempl)) {
+				include_ecrire("inc_documents.php3");
+				$type = strtoupper($rempl[1]);
+				if ($type == 'EMB')
+					$rempl = embed_document($rempl[2], $rempl[4]);
+				else
+					$rempl = integre_image($rempl[2], $rempl[4], $type);
+			}
+			$letexte = str_replace($reg[0], $rempl, $letexte);
+		}
+	}
+	return $letexte;
 }