diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php
index 6020d84bd9f5731a1f476db281e19054fa52b0fb..c99043b4495389c261121d9683a8f36d1b3bdae5 100644
--- a/ecrire/balise/formulaire_forum.php
+++ b/ecrire/balise/formulaire_forum.php
@@ -218,7 +218,7 @@ function inclure_previsu($texte,$titre, $email_auteur, $auteur, $url_site, $nom_
 			'email_auteur' => safehtml($email_auteur),
 			'auteur' => safehtml(typo($auteur)),
 			'texte' => safehtml(propre($texte)),
-			'url_site' => htmlspecialchars(vider_url($url_site)),
+			'url_site' => vider_url($url_site),
 			'nom_site_forum' => safehtml(typo($nom_site_forum)),
 			'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
 			'erreur' => $erreur,
diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php
index 42789b5d660737b6ac85651ec9ab3d796a6bc376..e501e16816f4e2fa49f5b0f0c77d844138d3ffe5 100644
--- a/ecrire/exec/auteur_infos.php
+++ b/ecrire/exec/auteur_infos.php
@@ -140,7 +140,7 @@ if (strval($nom)!='') {
 	$auteur['bio'] = corriger_caracteres($bio);
 	$auteur['pgp'] = corriger_caracteres($pgp);
 	$auteur['nom_site'] = corriger_caracteres($nom_site_auteur); // attention mix avec $nom_site_spip ;(
-	$auteur['url_site'] = vider_url($url_site);
+	$auteur['url_site'] = vider_url($url_site, false);
 
 	if ($new_pass) {
 		$htpass = generer_htpass($new_pass);
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 4c3845175cd5cf56a85e586dc0d904d0400e1689..cba65f1ea59106d08e235e40eaf27355850441aa 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -403,15 +403,18 @@ function attribut_html($texte) {
 }
 
 // Vider les url nulles comme 'http://' ou 'mailto:'
+// et leur appliquer un htmlspecialchars() + gerer les &
 // http://doc.spip.org/@vider_url
-function vider_url($url) {
+function vider_url($url, $entites = true) {
 	# un message pour abs_url
 	$GLOBALS['mode_abs_url'] = 'url';
 
 	$url = trim($url);
-	if (eregi("^(http:?/?/?|mailto:?)$", $url))
+	if (preg_match(",^(http:?/?/?|mailto:?)$,iS", $url))
 		return '';
 
+	if ($entites) $url = entites_html($url);
+
 	return $url;
 }
 
diff --git a/ecrire/inc/forum_insert.php b/ecrire/inc/forum_insert.php
index ce053073587029cd2d441be68c8b5d8d9cf2dacc..8cd0a4f32a5ffe4159e933fedfec2007f583c1d4 100644
--- a/ecrire/inc/forum_insert.php
+++ b/ecrire/inc/forum_insert.php
@@ -255,7 +255,7 @@ function inc_forum_insert_dist() {
 	else
 		$id_thread = $id_message; # id_thread oblige INSERT puis UPDATE.
 
-	$url_site = vider_url($url_site); # pas de http://
+	$url_site = vider_url($url_site, false); # pas de http://
 	spip_query("UPDATE spip_forum	SET id_parent = $id_forum,	id_rubrique = $id_rubrique,	id_article = $id_article,	id_breve = $id_breve,	id_syndic = $id_syndic,	id_auteur = $id_auteur,	id_thread = $id_thread,	date_heure = NOW(),							titre = ".spip_abstract_quote(corriger_caracteres($titre)).",			texte = ".spip_abstract_quote(corriger_caracteres($texte)).",			nom_site = ".spip_abstract_quote(corriger_caracteres($nom_site_forum)).",	url_site = ".spip_abstract_quote(corriger_caracteres($url_site)).",		auteur = ".spip_abstract_quote(corriger_caracteres($auteur)).",		email_auteur = ".spip_abstract_quote(corriger_caracteres($email_auteur)).",	ip = " . spip_abstract_quote($GLOBALS['ip']) . ",						statut = '$statut'	WHERE id_forum = $id_message");
 
 	// Entrer les mots-cles associes
diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php
index e59419f264253bc4c431a09f1262aaf1c383af63..23f91cccccdd111f96e142633c8f4012aa73d3cb 100644
--- a/ecrire/inc/texte.php
+++ b/ecrire/inc/texte.php
@@ -635,7 +635,7 @@ function calculer_url ($lien, $texte='', $pour='url') {
 
 	if ($pour == 'titre') return $texte;
 
-	$lien = entites_html(vider_url($lien));
+	$lien = vider_url($lien);
 
 	// petites corrections d'URL
 	if (preg_match(",^www\.[^@]+$,S",$lien))
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index c554f1094335ce1a4de74f8ec8e0d978d39ae592..0888bb41642671956cf8af988c09d2f574facb52 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -63,7 +63,6 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
 	}
 
 	// Tester si le compilateur renvoie une erreur
-
 	if (is_array($skel_code))
 		erreur_squelette($skel_code[0], $skel_code[1]);
 	else {
diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php
index f504613040775296a1a3f193b513e1a696f752cc..a6337f4ab4f9869ac76c3c6a5c94e6c409cccc19 100644
--- a/ecrire/public/interfaces.php
+++ b/ecrire/public/interfaces.php
@@ -272,7 +272,7 @@ $table_des_traitements['DATE_NOUVEAUTES'][]= 'vider_date(%s)';
 $table_des_traitements['DATE_REDAC'][]= 'vider_date(%s)';
 $table_des_traitements['DESCRIPTIF'][]= 'propre(%s)';
 $table_des_traitements['LIEN_TITRE'][]= 'typo(%s)';
-$table_des_traitements['LIEN_URL'][]= 'htmlspecialchars(vider_url(%s))';
+$table_des_traitements['LIEN_URL'][]= 'vider_url(%s)';
 $table_des_traitements['MESSAGE'][]= 'propre(%s)';
 $table_des_traitements['NOM_SITE_SPIP'][]= 'typo(%s)';
 $table_des_traitements['NOM_SITE'][]= '%s'; # construire_titre_lien -> typo
@@ -286,16 +286,16 @@ $table_des_traitements['TAGS'][]= '%s';
 $table_des_traitements['TEXTE'][]= 'propre(%s)';
 $table_des_traitements['TITRE'][]= 'typo(%s)';
 $table_des_traitements['TYPE'][]= 'typo(%s)';
-$table_des_traitements['URL_ARTICLE'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_BREVE'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_DOCUMENT'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_FORUM'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_MOT'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_RUBRIQUE'][]= 'htmlspecialchars(vider_url(%s))';
+$table_des_traitements['URL_ARTICLE'][]= 'vider_url(%s)';
+$table_des_traitements['URL_BREVE'][]= 'vider_url(%s)';
+$table_des_traitements['URL_DOCUMENT'][]= 'vider_url(%s)';
+$table_des_traitements['URL_FORUM'][]= 'vider_url(%s)';
+$table_des_traitements['URL_MOT'][]= 'vider_url(%s)';
+$table_des_traitements['URL_RUBRIQUE'][]= 'vider_url(%s)';
 $table_des_traitements['DESCRIPTIF_SITE_SPIP'][]= 'propre(%s)';
 $table_des_traitements['URL_SITE'][]= 'calculer_url(%s)';
-$table_des_traitements['URL_SOURCE'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_SYNDIC'][]= 'htmlspecialchars(vider_url(%s))';
+$table_des_traitements['URL_SOURCE'][]= 'vider_url(%s)';
+$table_des_traitements['URL_SYNDIC'][]= 'vider_url(%s)';
 $table_des_traitements['ENV'][]= 'entites_html(%s)';