diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index 077b07cbac347bdd46440d7ed304d140bbe048d9..f46286f3f51d2cbe78c72032b8921fd304b538b5 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -103,7 +103,7 @@ function spip_apres_typo ($letexte) {
 	if (function_exists('apres_typo'))
 		$letexte = apres_typo($letexte);
 
-	return $letexte;
+	return quote_amp($letexte);
 }
 
 
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index e64d27201202b487181c935baf66b40839df0b23..e54d37307bd08bb7b4109069d4361465f7effb98 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -844,11 +844,11 @@ class Link {
 $clean_link = new Link();
 
 
-// URLs avec passage & -> &
-function quote_amp ($url) {
-	$url = str_replace("&", "&", $url);
-	$url = str_replace("&", "&", $url);
-	return $url;
+// transformation XML des "&" en "&"
+function quote_amp($u) {
+	return preg_replace(
+		"/&(?![a-z]{0,4}\w{2,3};|#x?[0-9a-f]{2,5};)/i",
+		"&",$u);
 }