From acb33c224107aeca188eb42ccdf767c52fd258f3 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Thu, 8 Jun 2023 18:14:16 +0200
Subject: [PATCH] =?UTF-8?q?fix:=20quand=20une=20URL=20de=20redirection=20c?=
 =?UTF-8?q?ontient=20une=20querystring=20avec=20des=20crochets,=20les=20en?=
 =?UTF-8?q?coder=20pour=20g=C3=A9n=C3=A9rer=20l'URL=20affich=C3=A9e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Refs #4697
---
 ecrire/inc/filtres_ecrire.php           | 15 ++++++++++++++-
 prive/formulaires/rediriger_article.php |  4 +++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/ecrire/inc/filtres_ecrire.php b/ecrire/inc/filtres_ecrire.php
index 5e111aba53..34207ab90c 100644
--- a/ecrire/inc/filtres_ecrire.php
+++ b/ecrire/inc/filtres_ecrire.php
@@ -422,7 +422,20 @@ function lien_article_virtuel($virtuel) {
 		return '';
 	}
 
-	return propre('[->' . $virtuel . ']');
+	$joli = $virtuel;
+	$parts = parse_url($virtuel);
+	if (!empty($parts['query']) and str_contains($parts['query'], ']')) {
+		$query = str_replace(['[', ']'], [urlencode('['), urlencode(']')], $parts['query']);
+		$virtuel = str_replace("?" . $parts['query'], "?$query", $virtuel);
+	}
+	if ($virtuel !== $joli) {
+		$joli = propre('[' . $joli . ' -> ' . $virtuel . ']');
+	}
+	else {
+		$joli = propre('[->' . $virtuel . ']');
+	}
+
+	return $joli;
 }
 
 
diff --git a/prive/formulaires/rediriger_article.php b/prive/formulaires/rediriger_article.php
index dfd94ec9aa..12460893c7 100644
--- a/prive/formulaires/rediriger_article.php
+++ b/prive/formulaires/rediriger_article.php
@@ -36,10 +36,12 @@ function formulaires_rediriger_article_charger_dist($id_article, $retour = '') {
 
 
 	include_spip('inc/texte');
+	include_spip('inc/filtres_ecrire');
+	
 	$valeurs = [
 		'redirection' => $redirection,
 		'id' => $id_article,
-		'_afficher_url' => ($redirection ? propre("[->$redirection]") : ''),
+		'_afficher_url' => ($redirection ? lien_article_virtuel($redirection) : ''),
 	];
 
 	return $valeurs;
-- 
GitLab