Les fonctions parametre_url (js et php) n'insèrent pas correctement les tableaux
L'appel
parametre_url('http://domaine/spip.php?t[]=1','t',array(0,2));
retourne
http://domaine/spip.php?t[]=1&t[]=0&t[]=2
au lieu de
http://domaine/spip.php?t[]=0&t[]=2
Ce problème est présent à la fois dans la version javascript et la version php. Je n'ai testé que sur SPIP 3.0.16.
J'ai un patch qui corrige ça dans les deux cas.
Pour le javascript, il y a une regexp mal échappée, et un appel à la fonction substring avec un index négatif, ce qui n'est pas permis, seule la fonction substr le permet… (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring)
Et dans les deux cas, il faut bien vider les valeurs initiale du tableau dans l'url avant d'ajouter les nouvelles valeurs.
Je joins des fichiers corrigés, et voici un patch :
2 files changed, 9 insertions(+), 3 deletions(-) 2014/ecrire/inc/utils.php | 5 +++++ 2014/prive/javascript/ajaxCallback.js | 7 ++++--- Modified 2014/ecrire/inc/utils.php diff --git a/2014/ecrire/inc/utils.php b/2014/ecrire/inc/utils.php index b875aa2..01a7f53 100644 --- a/2014/ecrire/inc/utils.php +++ b/2014/ecrire/inc/utils.php `` -333,6 +333,11 `` function parametre_url($url, $c, $v=NULL, $sep='&') { $url[$n] = $r[1].'='.$u; unset($ajouts[$r[1]]); } + // Pour les tableaux on laisse tomber les valeurs de + // départ, on remplira à l'étape suivante + else { + unset($url[$n]); + } } } Modified 2014/prive/javascript/ajaxCallback.js diff --git a/2014/prive/javascript/ajaxCallback.js b/2014/prive/javascript/ajaxCallback.js index 118fc31..de434c4 100644 --- a/2014/prive/javascript/ajaxCallback.js +++ b/2014/prive/javascript/ajaxCallback.js `` -809,7 +809,7 `` function parametre_url(url,c,v,sep,force_vide){ } else a=url; - var regexp = new RegExp('^(' + c.replace('[]','\[\]') + '\[?\]?)(=.*)?$'); + var regexp = new RegExp('^(' + c.replace('[]','\\[\\]') + '\\[?\\]?)(=.*)?$'); var ajouts = []; var u = (typeof(v)!=='object')?encodeURIComponent(v):v; var na = []; `` -829,11 +829,12 `` function parametre_url(url,c,v,sep,force_vide){ } // Ajout. Pour une variable, remplacer au meme endroit, // pour un tableau ce sera fait dans la prochaine boucle - else if (r[1].substring(-2) != '[]') { + else if (r[1].substr(-2) != '[]') { na.push(r[1]+'='+u); ajouts.push(r[1]); } - else na.push(args[n]); + /* Pour les tableaux ont laisse tomber les valeurs de départ, on + remplira à l'étape suivante */ } else na.push(args[n]);