diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 4fa736f63919846186067962c251ad41e326f8ed..956857eb150b04da22643315b61b2fac606442ff 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -1772,22 +1772,32 @@ function valeur_numerique($expr) {
 	return intval($a);
 }
 
-// La fonction suivante ne sert plus aujourd'hui qu'aux squelettes des
-// balises dynamiques, en attendant une nouvelle conception qui permettra
-// d'eviter les redondances de calcul et d'ecriture qu'elle induit.
-// Elle fournit la suite de Input-Hidden correspondant aux parametres de 
-// l'URL donnee en argument. Ce besoin de ne devrait pas apparaitre,
-// utiliser plutot generer_form_ecrire.
+// Fournit la suite de Input-Hidden correspondant aux parametres de
+// l'URL donnee en argument
 // http://doc.spip.org/@form_hidden
 function form_hidden($action) {
-	$hidden = '';
+	$hidden = array();
 	if (false !== ($p = strpos($action, '?')))
 		foreach(preg_split('/&(amp;)?/S',substr($action,$p+1)) as $c) {
-			$hidden .= "\n<input name='" .
-				entites_html(rawurldecode(str_replace('=', "' value='", $c))) .
-				"' type='hidden' />";
+			list($var,$val) = explode('=', $c, 2);
+			$input = '<input name="'
+				. entites_html($var)
+				.'"'
+				. (is_null($val)
+					? ''
+					: ' value="'.entites_html(rawurldecode($val)).'"'
+					)
+				. ' type="hidden" />';
+
+			// si c'est une variable de la forme a[]=2, cumuler les input
+			// sinon ne conserver que le premier
+			if (preg_match(',\[\]$,S', $var))
+				$hidden[] = $input;
+			else
+				if (!isset($hidden[$var]))
+					$hidden[$var] = $input;
 	}
-	return $hidden;
+	return join("\n", $hidden);
 }
 
 // http://doc.spip.org/@filtre_bornes_pagination_dist
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 96d12e2c4a3c98b5cc349d5843b7eabc33876555..fe12469e35331060a5b42f27b5f25b903570d26a 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -240,6 +240,7 @@ function set_request($var, $val = NULL, $c=false) {
 // Exemples : [(#SELF|parametre_url{suite,18})] (ajout)
 //            [(#SELF|parametre_url{suite,''})] (supprime)
 //            [(#SELF|parametre_url{suite})]    (prend $suite dans la _request)
+//            [(#SELF|parametre_url{suite[],1})] (tableaux valeurs multiples)
 // http://doc.spip.org/@parametre_url
 function parametre_url($url, $c, $v=NULL, $sep='&amp;') {
 
@@ -266,9 +267,13 @@ function parametre_url($url, $c, $v=NULL, $sep='&amp;') {
 			if ($v === NULL) {
 				return $r[2]?substr($r[2],1):'';
 			}
-			elseif (!$v) {// suppression
+			// suppression
+			elseif (!$v) {
 				unset($url[$n]);
-			} else {
+			}
+			// ajout ; dans le cas d'un tableau ne rien faire, dans
+			// le cas d'une variable nrmale remplacer au meme endroit dans l'url
+			elseif (substr($r[1],-2) != '[]') {
 				$url[$n] = $r[1].'='.$u;
 				unset($ajouts[$r[1]]);
 			}