From 3cc634c03b5141d9bbc2bc5396e3e686f90ae893 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 17 Mar 2006 22:56:59 +0000
Subject: [PATCH] =?UTF-8?q?Utilisation=20exclusive=20de=20''rawurlencode''?=
 =?UTF-8?q?=20et=20''rawurldecode'',=20rempla=C3=A7ant=20''urlencode''=20e?=
 =?UTF-8?q?t=20''urldecode''=20pour=20unifier=20les=20traitements=20(on=20?=
 =?UTF-8?q?prend=20celle=20qui=20suit=20un=20RFC,=20le=201738).=20Transfor?=
 =?UTF-8?q?mation=20obtenue=20par:=20for=20i=20in=20$(grep=20-l=20url..cod?=
 =?UTF-8?q?e=20*p=20*/*p=20*/*/*p);=20do=20echo=20"=3D=3D=3D=3D=3D$i";=20s?=
 =?UTF-8?q?ed=20's/\(url..code[^a-z]\)/raw\1/;s/rawraw/raw/'=20$i=20>=20x;?=
 =?UTF-8?q?=20mv=20=20x=20$i=20done?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/action/autoriser.php  |  2 +-
 ecrire/action/cookie.php     |  8 ++++----
 ecrire/action/supprimer.php  |  2 +-
 ecrire/action/tourner.php    |  2 +-
 ecrire/exec/admin_plugin.php |  7 +++----
 ecrire/exec/articles.php     | 10 +++++-----
 ecrire/exec/breves_voir.php  |  2 +-
 ecrire/exec/forum.php        |  4 ++--
 ecrire/exec/message.php      |  4 ++--
 ecrire/exec/mots_edit.php    |  2 +-
 ecrire/exec/mots_tous.php    |  6 +++---
 ecrire/exec/mots_type.php    |  2 +-
 ecrire/exec/naviguer.php     |  2 +-
 ecrire/inc/auth.php          |  2 +-
 ecrire/inc/distant.php       |  4 ++--
 ecrire/inc/filtres.php       |  2 +-
 ecrire/inc/getdocument.php   |  2 +-
 ecrire/inc/logos.php         |  2 +-
 ecrire/inc/math.php          |  2 +-
 ecrire/inc/mots.php          |  6 +++---
 ecrire/inc/plugin.php        |  4 ++--
 ecrire/inc/session.php       |  2 +-
 ecrire/inc/statistiques.php  |  6 +++---
 ecrire/inc/syndic.php        |  4 ++--
 ecrire/inc/texte.php         |  4 ++--
 ecrire/inc/utils.php         |  4 ++--
 ecrire/public.php            |  2 +-
 ecrire/public/global.php     |  2 +-
 28 files changed, 50 insertions(+), 51 deletions(-)

diff --git a/ecrire/action/autoriser.php b/ecrire/action/autoriser.php
index b5e64011c9..26997a9f0b 100644
--- a/ecrire/action/autoriser.php
+++ b/ecrire/action/autoriser.php
@@ -26,7 +26,7 @@ function action_autoriser_dist()
 {
   global $file, $arg, $toujours;
 
-  $file = urldecode($file);
+  $file = rawurldecode($file);
 
   $refus = false;
   if (strpos($file,'../') !== false)
diff --git a/ecrire/action/cookie.php b/ecrire/action/cookie.php
index 78eb4520c2..2608cf0bdf 100644
--- a/ecrire/action/cookie.php
+++ b/ecrire/action/cookie.php
@@ -24,7 +24,7 @@ function auth_http($url, $essai_auth_http) {
 		else {
 			ask_php_auth(_T('login_connexion_refusee'),
 			_T('login_login_pass_incorrect'), _T('login_retour_site'),
-			"url=".urlencode($url), _T('login_nouvelle_tentative'),
+			"url=".rawurlencode($url), _T('login_nouvelle_tentative'),
 			(ereg(_DIR_RESTREINT_ABS, $url)));
 			exit;
 		}
@@ -125,7 +125,7 @@ if ($test_echec_cookie == 'oui') {
 	spip_setcookie('spip_session', 'test_echec_cookie');
 	redirige_par_entete(generer_url_public('login'),
 			    "var_echec_cookie=oui&url="
-			    . ($url ? urlencode($url) : _DIR_RESTREINT_ABS), true);
+			    . ($url ? rawurlencode($url) : _DIR_RESTREINT_ABS), true);
 }
 
 // Tentative de login
@@ -189,7 +189,7 @@ if ($essai_login == "oui") {
 				"var_login=$login", true);
 		if ($session_password || $session_password_md5)
 			$redirect .= '&var_erreur=pass';
-		$redirect .= '&url=' . urlencode($url);
+		$redirect .= '&url=' . rawurlencode($url);
 		spip_log("echec login: $login");
 	}
 	else
@@ -200,7 +200,7 @@ if ($essai_login == "oui") {
 if ($cookie_admin == "non") {
 	if (!$retour)
 		$retour = generer_url_public('login',
-			'url='.urlencode($url), true);
+			'url='.rawurlencode($url), true);
 
 	spip_setcookie('spip_admin', $spip_admin, time() - 3600 * 24);
 	$redirect = ereg_replace("([?&])var_login=[^&]*&?", '\1', $retour);
diff --git a/ecrire/action/supprimer.php b/ecrire/action/supprimer.php
index 2e04e7cb3c..bf7a6eb877 100644
--- a/ecrire/action/supprimer.php
+++ b/ecrire/action/supprimer.php
@@ -62,6 +62,6 @@ function action_supprimer_dist() {
 		}
 	}
 
-	redirige_par_entete(urldecode($redirect));
+	redirige_par_entete(rawurldecode($redirect));
 }
 ?>
diff --git a/ecrire/action/tourner.php b/ecrire/action/tourner.php
index 794fcdbd6a..ea0f683dad 100644
--- a/ecrire/action/tourner.php
+++ b/ecrire/action/tourner.php
@@ -71,7 +71,7 @@ function action_tourner_dist() {
 		spip_query("UPDATE spip_documents SET largeur=$largeur, hauteur=$hauteur WHERE id_document=$arg");
 
 	}
-	redirige_par_entete(urldecode($redirect));
+	redirige_par_entete(rawurldecode($redirect));
 
 }
 
diff --git a/ecrire/exec/admin_plugin.php b/ecrire/exec/admin_plugin.php
index a38d0bee93..5994139927 100644
--- a/ecrire/exec/admin_plugin.php
+++ b/ecrire/exec/admin_plugin.php
@@ -86,11 +86,11 @@ function ligne_plug($plug_file,&$plug_actifs,$last_actif = false,$surligne = fal
 			// Possibilité d'ordonner les plugins masquee pour le moment
 			// la fonction reste possible par l'url du type monter=forms,descendre=forms
 			/*if ($id_input>0)
-				$s = "<a href='".generer_url_ecrire('admin_plugin',"monter=".urlencode($plug_file))."'><img src='"._DIR_IMG_PACK."monter-16.png' style='border:0'></a>";
+				$s = "<a href='".generer_url_ecrire('admin_plugin',"monter=".rawurlencode($plug_file))."'><img src='"._DIR_IMG_PACK."monter-16.png' style='border:0'></a>";
 			$vals[] = $s;
 			$s = "";
 			if (!$last_actif)
-				$s = "<a href='".generer_url_ecrire('admin_plugin',"descendre=".urlencode($plug_file))."'><img src='"._DIR_IMG_PACK."descendre-16.png' style='border:0'></a>";*/
+				$s = "<a href='".generer_url_ecrire('admin_plugin',"descendre=".rawurlencode($plug_file))."'><img src='"._DIR_IMG_PACK."descendre-16.png' style='border:0'></a>";*/
 		}
 		else{
 			$vals[] = $s;
@@ -218,5 +218,4 @@ function exec_admin_plugin_dist(){
 	fin_page();
 
 }
-
-?>
\ No newline at end of file
+?>
diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index 969add82d0..46241bbea7 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -1038,8 +1038,8 @@ function rechercher_auteurs_articles($cherche_auteur, $id_article, $id_rubrique,
 	AND $GLOBALS['connect_toutes_rubriques']) {
 
 		echo "<div style='width: 200px;'>";
-		$retour = urlencode(generer_url_ecrire("articles","id_article=$id_article"));
-		$titre = urlencode($cherche_auteur);
+		$retour = rawurlencode(generer_url_ecrire("articles","id_article=$id_article"));
+		$titre = rawurlencode($cherche_auteur);
 		icone_horizontale(_T('icone_creer_auteur'), generer_url_ecrire("auteur_infos","ajouter_id_article=$id_article&nom=$titre&redirect=$retour"), "redacteurs-24.gif", "creer.gif");
 		echo "</div> ";
 
@@ -1182,7 +1182,7 @@ function ajouter_auteurs_articles($id_article, $id_rubrique, $les_auteurs, $flag
 	    AND $options == "avancees"
 	    AND !$supprimer_bouton_creer_auteur) {
 	echo "<td width='200'>";
-	$retour = urlencode(generer_url_ecrire("articles","id_article=$id_article"));
+	$retour = rawurlencode(generer_url_ecrire("articles","id_article=$id_article"));
 	icone_horizontale(_T('icone_creer_auteur'), generer_url_ecrire("auteur_infos","ajouter_id_article=$id_article&redirect=$retour"), "redacteurs-24.gif", "creer.gif");
 	echo "</td>";
 	echo "<td width='20'>&nbsp;</td>";
@@ -1311,9 +1311,9 @@ function affiche_forums_article($id_article, $id_rubrique, $titre, $debut, $mute
   $forum_retour = generer_url_ecrire("articles","id_article=$id_article", true);
   
   if (!$mute) {
-    $tm = urlencode($titre);
+    $tm = rawurlencode($titre);
     echo "\n<div align='center'>";
-    icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi","statut=prive&adresse_retour=" . urlencode($forum_retour) . "&id_article=$id_article&titre_message=$tm"), "forum-interne-24.gif", "creer.gif");
+    icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi","statut=prive&adresse_retour=" . rawurlencode($forum_retour) . "&id_article=$id_article&titre_message=$tm"), "forum-interne-24.gif", "creer.gif");
     echo "</div>";
   }
 
diff --git a/ecrire/exec/breves_voir.php b/ecrire/exec/breves_voir.php
index b2a43cf37e..c70da1f3dc 100644
--- a/ecrire/exec/breves_voir.php
+++ b/ecrire/exec/breves_voir.php
@@ -223,7 +223,7 @@ fin_cadre_relief();
 echo "<BR><BR>";
 
 echo "\n<div align='center'>";
- icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=prive&id_breve=$id_breve&titre_message=".urlencode($titre) . "&adresse_retour=".urlencode( generer_url_ecrire("breves_voir", "id_breve=$id_breve"))),
+ icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi", "statut=prive&id_breve=$id_breve&titre_message=".rawurlencode($titre) . "&adresse_retour=".urlencode( generer_url_ecrire("breves_voir", "id_breve=$id_breve"))),
        "forum-interne-24.gif", "creer.gif");
 echo "</div>";
 
diff --git a/ecrire/exec/forum.php b/ecrire/exec/forum.php
index 7d02e33ef5..7ed61a1cf9 100644
--- a/ecrire/exec/forum.php
+++ b/ecrire/exec/forum.php
@@ -73,9 +73,9 @@ function exec_forum_dist()
   echo "<p><div align='center'>";
   icone (_T('icone_poster_message'), generer_url_ecrire("forum_envoi", 
 			 "statut=$statutforum&adresse_retour=" .
-			 urlencode($urlforum) . 
+			 rawurlencode($urlforum) . 
 			 "&titre_message=" .
-			 urlencode(filtrer_entites(_T('texte_nouveau_message')))),
+			 rawurlencode(filtrer_entites(_T('texte_nouveau_message')))),
        $logo, "creer.gif");
   echo "</div></p>";
 
diff --git a/ecrire/exec/message.php b/ecrire/exec/message.php
index b5857e44b7..f95a182f15 100644
--- a/ecrire/exec/message.php
+++ b/ecrire/exec/message.php
@@ -239,8 +239,8 @@ function http_ajouter_participants($ze_auteurs, $id_message)
 
 function http_afficher_forum_perso($id_message, $titre)
 {
-	$forum_retour = urlencode(generer_url_ecrire("message","id_message=$id_message"));
-	$utitre = urlencode($titre);
+	$forum_retour = rawurlencode(generer_url_ecrire("message","id_message=$id_message"));
+	$utitre = rawurlencode($titre);
 
 	echo "<br /><br />\n<div align='center'>";
 	icone(_T('icone_poster_message'), generer_url_ecrire("forum_envoi","statut=perso&adresse_retour=$forum_retour&id_message=$id_message&titre_message=$utitre"), "forum-interne-24.gif", "creer.gif");
diff --git a/ecrire/exec/mots_edit.php b/ecrire/exec/mots_edit.php
index b3260d912f..94f8e039b3 100644
--- a/ecrire/exec/mots_edit.php
+++ b/ecrire/exec/mots_edit.php
@@ -160,7 +160,7 @@ debut_raccourcis();
 
 if ($connect_statut == '0minirezo'  AND $connect_toutes_rubriques) {
 		icone_horizontale(_T('icone_modif_groupe_mots'), generer_url_ecrire("mots_type","id_groupe=$id_groupe"), "groupe-mot-24.gif", "edit.gif");
-		icone_horizontale(_T('icone_creation_mots_cles'), generer_url_ecrire("mots_edit", "new=oui&id_groupe=$id_groupe&redirect=" . urlencode(generer_url_ecrire('mots_tous'))), 
+		icone_horizontale(_T('icone_creation_mots_cles'), generer_url_ecrire("mots_edit", "new=oui&id_groupe=$id_groupe&redirect=" . rawurlencode(generer_url_ecrire('mots_tous'))), 
 				  "mot-cle-24.gif",
 				  "creer.gif");
  }
diff --git a/ecrire/exec/mots_tous.php b/ecrire/exec/mots_tous.php
index 45dd608d05..17830ac50a 100644
--- a/ecrire/exec/mots_tous.php
+++ b/ecrire/exec/mots_tous.php
@@ -56,7 +56,7 @@ function exec_mots_tous_dist()
 
 		// si le mot n'est pas lie, on demande sa suppression
 		if ($nb_articles + $nb_breves + $nb_sites + $nb_forum == 0) {
-		  redirige_par_entete(generer_url_ecrire("mots_edit","supp_mot=$id_mot&redirect_ok=oui&redirect=" . urlencode(generer_url_ecrire('mots_tous')), true));
+		  redirige_par_entete(generer_url_ecrire("mots_edit","supp_mot=$id_mot&redirect_ok=oui&redirect=" . rawurlencode(generer_url_ecrire('mots_tous')), true));
 		} // else traite plus loin (confirmation de suppression)
 	}
 }
@@ -142,7 +142,7 @@ if ($conf_mot>0) {
 	echo _T('info_delet_mots_cles', array('titre_mot' => $titre_mot, 'type_mot' => $type_mot, 'texte_lie' => $texte_lie));
 
 	echo "<UL>";
-	echo "<LI><B><A href='", generer_url_ecrire('mots_edit', "supp_mot=$id_mot&redirect_ok=oui&redirect=" . urlencode(generer_url_ecrire('mots_tous'))),
+	echo "<LI><B><A href='", generer_url_ecrire('mots_edit', "supp_mot=$id_mot&redirect_ok=oui&redirect=" . rawurlencode(generer_url_ecrire('mots_tous'))),
 	  "'>",
 	  _T('item_oui'),
 	  "</A>,</B> ",
@@ -230,7 +230,7 @@ while ($row_groupes = spip_fetch_array($result_groupes)) {
 		}
 		echo "<td>";
 		echo "<div align='$spip_lang_right'>";
-		icone(_T('icone_creation_mots_cles'), generer_url_ecrire("mots_edit","new=oui&id_groupe=$id_groupe&redirect=" . urlencode(generer_url_ecrire('mots_tous'))), "mot-cle-24.gif", "creer.gif");
+		icone(_T('icone_creation_mots_cles'), generer_url_ecrire("mots_edit","new=oui&id_groupe=$id_groupe&redirect=" . rawurlencode(generer_url_ecrire('mots_tous'))), "mot-cle-24.gif", "creer.gif");
 		echo "</div>";
 		echo "</td></tr></table>";
 	}	
diff --git a/ecrire/exec/mots_type.php b/ecrire/exec/mots_type.php
index 53edc7fa0b..083eace997 100644
--- a/ecrire/exec/mots_type.php
+++ b/ecrire/exec/mots_type.php
@@ -83,7 +83,7 @@ gros_titre($titre);
 echo aide("motsgroupes");
 
 if ($connect_statut =="0minirezo"){
-	$type=entites_html(urldecode($type));
+	$type=entites_html(rawurldecode($type));
 	echo "<p><font face='Verdana,Arial,Sans,sans-serif'>";
 	echo generer_url_post_ecrire("mots_tous", "id_groupe=$id_groupe");
 	echo "<INPUT TYPE='Hidden' NAME='modifier_groupe' VALUE=\"oui\">\n";
diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php
index 8a7bd553bd..8c9e2caaca 100644
--- a/ecrire/exec/naviguer.php
+++ b/ecrire/exec/naviguer.php
@@ -404,7 +404,7 @@ if ($relief) {
 		if ($id_rubrique > 0 AND ($flag_editable OR $GLOBALS['meta']["proposer_sites"]> 0)) {
 	
 		echo "<div align='$spip_lang_right'>";
-		icone(_T('info_sites_referencer'), generer_url_ecrire('sites_edit', "id_rubrique=$id_rubrique&redirect=" . urlencode(generer_url_ecrire('naviguer', "id_rubrique=$id_rubrique"))), "site-24.gif", "creer.gif");
+		icone(_T('info_sites_referencer'), generer_url_ecrire('sites_edit', "id_rubrique=$id_rubrique&redirect=" . rawurlencode(generer_url_ecrire('naviguer', "id_rubrique=$id_rubrique"))), "site-24.gif", "creer.gif");
 		echo "</div><p>";
 	  }
 	}
diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php
index 8bcb06ba5a..942fcbec72 100644
--- a/ecrire/inc/auth.php
+++ b/ecrire/inc/auth.php
@@ -101,7 +101,7 @@ function inc_auth_dist() {
 		}
 
 		return (generer_url_public('login',
-			"url=".urlencode(str_replace('/./', '/',
+			"url=".rawurlencode(str_replace('/./', '/',
 			(_DIR_RESTREINT ? "" : _DIR_RESTREINT_ABS)
 			. str_replace('&amp;', '&', self()))),true).$erreurcookie);
 	}
diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index 2c6212c7fe..419f4d8db5 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -73,10 +73,10 @@ function prepare_donnees_post($donnees, $boundary = '') {
 			foreach ($donnees as $cle => $valeur) {
 				if (is_array($valeur)) {
 					foreach ($valeur as $val2) {
-						$chaine[] = urlencode($cle).'='.urlencode($val2);
+						$chaine[] = rawurlencode($cle).'='.urlencode($val2);
 					}
 				} else {
-					$chaine[] = urlencode($cle).'='.urlencode($valeur);
+					$chaine[] = rawurlencode($cle).'='.urlencode($valeur);
 				}
 			}
 			$chaine = implode('&', $chaine);
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index e9573ba11c..a1122d3b5a 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -281,7 +281,7 @@ function url_var_recherche($url) {
 		list ($url,$ancre) = preg_split(',#,', $url, 2);
 		if ($ancre) $ancre='#'.$ancre;
 
-		$x = "var_recherche=".urlencode(_request('recherche'));
+		$x = "var_recherche=".rawurlencode(_request('recherche'));
 
 		if (strpos($url, '?') === false)
 			return "$url?$x$ancre";
diff --git a/ecrire/inc/getdocument.php b/ecrire/inc/getdocument.php
index 4986cbdd2f..b47e18d29a 100644
--- a/ecrire/inc/getdocument.php
+++ b/ecrire/inc/getdocument.php
@@ -123,7 +123,7 @@ function check_upload_error($error, $msg='') {
 	spip_log ("erreur upload $error");
 
 	minipres($msg, '<form action="' .
-		urldecode($GLOBALS['redirect']).
+		rawurldecode($GLOBALS['redirect']).
 		'" method="post"><div align="'.  #ici method='post' permet d'aller au bon endroit, alors qu'en GET on perd les variables... mais c'est un hack sale.
 		$spip_lang_right.
 		'"><input type="submit" class="fondl"  value="'.
diff --git a/ecrire/inc/logos.php b/ecrire/inc/logos.php
index 58fb68879d..abd9c8e78f 100644
--- a/ecrire/inc/logos.php
+++ b/ecrire/inc/logos.php
@@ -83,7 +83,7 @@ function afficher_boite_logo($type, $id_objet, $id, $texteon, $texteoff, $script
 
 	if ($spip_display != 4) {
 	
-	  $redirect = urlencode(generer_url_ecrire($script, "$id_objet=$id", true));
+	  $redirect = rawurlencode(generer_url_ecrire($script, "$id_objet=$id", true));
 		$logon = $type.'on'.$id;
 		$logoff = $type.'off'.$id;
 		include_spip('inc/session');
diff --git a/ecrire/inc/math.php b/ecrire/inc/math.php
index 089a68bf9a..58bcaa24bf 100644
--- a/ecrire/inc/math.php
+++ b/ecrire/inc/math.php
@@ -42,7 +42,7 @@ function image_math($tex) {
 	if (!@file_exists($fichier)) {
 		// Aller chercher l'image sur le serveur
 		if ($server) {
-			spip_log($url = $server.'?'.urlencode($tex));
+			spip_log($url = $server.'?'.rawurlencode($tex));
 			include_spip('inc/distant');
 			if ($image = recuperer_page($url)) {
 				if ($f = @fopen($fichier, 'w')) {
diff --git a/ecrire/inc/mots.php b/ecrire/inc/mots.php
index f09e00d7b1..3cf4e807e0 100644
--- a/ecrire/inc/mots.php
+++ b/ecrire/inc/mots.php
@@ -105,7 +105,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
   global $connect_statut, $connect_toutes_rubriques, $options;
 	global $spip_lang_rtl, $spip_lang_right;
 
-	$retour = urlencode($retour);
+	$retour = rawurlencode($retour);
 	$select_groupe = $GLOBALS['select_groupe'];
 
 	if ($table == 'articles') {
@@ -232,7 +232,7 @@ function formulaire_mots($table, $id_objet, $nouv_mot, $supp_mot, $cherche_mot,
 		if ($GLOBALS['connect_statut'] == '0minirezo'
 		     AND $connect_toutes_rubriques ) {
 			echo "<div style='width: 200px;'>";
-			$titre = urlencode($cherche_mot);
+			$titre = rawurlencode($cherche_mot);
 			icone_horizontale(_T('icone_creer_mot_cle'), generer_url_ecrire("mots_edit","new=oui&ajouter_id_article=$id_objet&table=$table&table_id=$table_id&titre=$titre&redirect=$retour"), "mot-cle-24.gif", "creer.gif");
 			echo "</div> ";
 		}
@@ -652,7 +652,7 @@ function afficher_groupe_mots($id_groupe) {
 
 				if ($connect_statut == "0minirezo" OR $occurrences['articles'][$id_mot] > 0)
 				  $s = "<a href='" .
-				    generer_url_ecrire('mots_edit', "id_mot=$id_mot&redirect=" . urlencode(generer_url_ecrire('mots_tous'))) .
+				    generer_url_ecrire('mots_edit', "id_mot=$id_mot&redirect=" . rawurlencode(generer_url_ecrire('mots_tous'))) .
 				    "' class='liste-mot'>".typo($titre_mot)."</a>";
 				else
 					$s = typo($titre_mot);
diff --git a/ecrire/inc/plugin.php b/ecrire/inc/plugin.php
index 6e6c8c261b..0a294f91f2 100644
--- a/ecrire/inc/plugin.php
+++ b/ecrire/inc/plugin.php
@@ -199,8 +199,8 @@ function ordonne_plugin(){
 	foreach($liste as $plug){
 		$index = $i;
 		$i = $i+2;
-		if (urldecode($_GET['monter'])==$plug) $index = $index-3;
-		if (urldecode($_GET['descendre'])==$plug) $index = $index+3;
+		if (rawurldecode($_GET['monter'])==$plug) $index = $index-3;
+		if (rawurldecode($_GET['descendre'])==$plug) $index = $index+3;
 		$liste_triee[$index] = $plug;
 	}
 	ksort($liste_triee);
diff --git a/ecrire/inc/session.php b/ecrire/inc/session.php
index fb73d0e309..bd4969584d 100644
--- a/ecrire/inc/session.php
+++ b/ecrire/inc/session.php
@@ -277,7 +277,7 @@ function generer_action_auteur($action, $arg, $redirect="", $no_entites=false)
 {
 	global $connect_id_auteur;
 	$hash = calculer_action_auteur("$action $arg");
-	if ($redirect) $redirect = "&redirect=" . urlencode($redirect);
+	if ($redirect) $redirect = "&redirect=" . rawurlencode($redirect);
 
 	return generer_url_action($action, "arg=$arg&id_auteur=$connect_id_auteur&hash=$hash$redirect", $no_entites);
 }
diff --git a/ecrire/inc/statistiques.php b/ecrire/inc/statistiques.php
index 4fa1fe654c..219a13317f 100644
--- a/ecrire/inc/statistiques.php
+++ b/ecrire/inc/statistiques.php
@@ -80,7 +80,7 @@ function stats_show_keywords($kw_referer, $kw_referer_host) {
 	
 	if (strpos('-'.$kw_referer, eregi_replace("^(https?:?/?/?)?(www\.)?", "",$url_site))) {
 		if (eregi("(s|search|r|recherche)=([^&]+)", $kw_referer, $regs))
-			$keywords = urldecode($regs[2]);
+			$keywords = rawurldecode($regs[2]);
 			
 			
 		else
@@ -100,7 +100,7 @@ function stats_show_keywords($kw_referer, $kw_referer_host) {
 				// Si on a defini le nom de la variable en expression reguliere, chercher la bonne variable
 				if (! strlen($keywords) > 0) {
 					if (ereg($arr_engines[$cnt][1]."([^\&]*)", $query, $vals)) {
-						$keywords = urldecode($vals[2]);
+						$keywords = rawurldecode($vals[2]);
 					}
 				}
 			} else {
@@ -197,7 +197,7 @@ function aff_referers ($query, $limit=10, $plus) {
 
 			$visites = pos($nbvisites);
 
-			if (strlen($source_vignettes) > 0) $ret = "\n<div style='clear: $spip_lang_right;'></div><a href=\"http://".$lesurls[$numero]."\"><img src=\"$source_vignettes".urlencode($lesurls[$numero])."\" style=\"float: $spip_lang_right; border: 0; margin-bottom: 3px; margin-left: 3px;\" /></a>";
+			if (strlen($source_vignettes) > 0) $ret = "\n<div style='clear: $spip_lang_right;'></div><a href=\"http://".$lesurls[$numero]."\"><img src=\"$source_vignettes".rawurlencode($lesurls[$numero])."\" style=\"float: $spip_lang_right; border: 0; margin-bottom: 3px; margin-left: 3px;\" /></a>";
 
 			$ret .= "\n<li>";
 
diff --git a/ecrire/inc/syndic.php b/ecrire/inc/syndic.php
index 36501da11b..3a1e52944e 100644
--- a/ecrire/inc/syndic.php
+++ b/ecrire/inc/syndic.php
@@ -81,14 +81,14 @@ function ajouter_tags($matches, $item) {
 		else if (extraire_attribut($match[0], 'scheme') == 'urn:flickr:tags') {
 			foreach(explode(' ', $mot) as $petit)
 				if ($t = creer_tag($petit, $type,
-				'http://www.flickr.com/photos/tags/'.urlencode($petit).'/'))
+				'http://www.flickr.com/photos/tags/'.rawurlencode($petit).'/'))
 					$tags[] = $t;
 			$mot = '';
 		} else {
 			# type del.icio.us
 			foreach(explode(' ', $mot) as $petit)
 				if (preg_match(',<rdf[^>]* resource=["\']([^>]*/'
-				.preg_quote(urlencode($petit),',').')["\'],i',
+				.preg_quote(rawurlencode($petit),',').')["\'],i',
 				$item, $m)) {
 					$mot = '';
 					if ($t = creer_tag($petit, $type, $m[1]))
diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php
index 1cfa21a777..ab44c32bf3 100644
--- a/ecrire/inc/texte.php
+++ b/ecrire/inc/texte.php
@@ -934,7 +934,7 @@ function traiter_raccourcis($letexte) {
 			if ($marqueur_notes) // quand il y a plusieurs series
 								 // de notes sur une meme page
 				$mn = $marqueur_notes.'-';
-			$ancre = $mn.urlencode($num_note);
+			$ancre = $mn.rawurlencode($num_note);
 
 			// ne mettre qu'une ancre par appel de note (XHTML)
 			if (!$notes_vues[$ancre]++)
@@ -985,7 +985,7 @@ function traiter_raccourcis($letexte) {
 		if (preg_match_all($regexp, $letexte, $matches, PREG_SET_ORDER))
 		foreach ($matches as $regs) {
 			$terme = trim($regs[1]);
-			$terme_underscore = urlencode(preg_replace(',\s+,', '_', $terme));
+			$terme_underscore = rawurlencode(preg_replace(',\s+,', '_', $terme));
 			if (strstr($url_glossaire_externe,"%s"))
 				$url = str_replace("%s", $terme_underscore, $url_glossaire_externe);
 			else
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 8c6c8c4a39..c1b7ed8e14 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -296,7 +296,7 @@ function parametre_url($url, $c, $v=NULL, $sep='&amp;') {
 			if (!$v) {
 				unset($url[$n]);
 			} else {
-				$url[$n] = $c.'='.urlencode($v);
+				$url[$n] = $c.'='.rawurlencode($v);
 				$v = '';
 			}
 		}
@@ -304,7 +304,7 @@ function parametre_url($url, $c, $v=NULL, $sep='&amp;') {
 
 	// ajouter notre parametre si on ne l'a pas encore trouve
 	if ($v)
-		$url[] = $c.'='.urlencode($v);
+		$url[] = $c.'='.rawurlencode($v);
 
 	// eliminer les vides
 	$url = array_filter($url);
diff --git a/ecrire/public.php b/ecrire/public.php
index f43f52d6ca..4ef218fdca 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -46,7 +46,7 @@ if (defined('_INC_PUBLIC')) {
 	if ($action = _request('action')) {
 		$var_f = include_fonction($action, 'action');
 		$var_f();
-		if ($redirect) redirige_par_entete(urldecode($redirect));
+		if ($redirect) redirige_par_entete(rawurldecode($redirect));
 		exit;
 	}
 
diff --git a/ecrire/public/global.php b/ecrire/public/global.php
index 3197f8d03f..2dafea703c 100644
--- a/ecrire/public/global.php
+++ b/ecrire/public/global.php
@@ -51,7 +51,7 @@ function calcule_header_et_page ($fond) {
 			spip_log('debug !');
 		else
 			redirige_par_entete(generer_url_public('login',
-			'url='.urlencode(
+			'url='.rawurlencode(
 			parametre_url(self(), 'var_mode', 'debug', '&')
 			), true));
 	}
-- 
GitLab