diff --git a/ecrire/inc/lien.php b/ecrire/inc/lien.php index be057561726ba5f82ca7919ea49810676b9d301f..60dc5c1b9a52ee84558b3b401159e5721233c8f6 100644 --- a/ecrire/inc/lien.php +++ b/ecrire/inc/lien.php @@ -282,16 +282,23 @@ function traiter_raccourci_liens($t) { return preg_replace_callback(_EXTRAIRE_LIENS, 'traiter_autoliens', $t); } -// Fonction pour les champs chapo commencant par =, redirection qui peut etre: -// 1. un raccourci Spip habituel (premier If) [texte->TYPEnnn] -// 2. un ultra raccourci TYPEnnn voire nnn (article) (deuxieme If) -// 3. une URL std -// renvoie une tableau structure comme ci-dessus mais sans calcul d'URL -// (cf fusion de sauvegardes) define('_RACCOURCI_CHAPO', '/^(\W*)(\W*)(\w*\d+([?#].*)?)$/'); - -// http://doc.spip.org/@chapo_redirige +/** + * Fonction pour les champs chapo commencant par =, redirection qui peut etre: + * 1. un raccourci Spip habituel (premier If) [texte->TYPEnnn] + * 2. un ultra raccourci TYPEnnn voire nnn (article) (deuxieme If) + * 3. une URL std + * + * renvoie l'url reelle de redirection si le $url=true, + * l'url brute contenue dans le chapo sinon + * + * http://doc.spip.org/@chapo_redirige + * + * @param string $chapo + * @param bool $url + * @return string + */ function chapo_redirige($chapo, $url=false) { if (!preg_match(_RACCOURCI_LIEN, $chapo, $m)) diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php index 2f567f084c36fb946ddfdde33aaf5587d524b5d2..6e62e94aa2bfe075f90b8962d23732a92f2aa6d1 100644 --- a/ecrire/public/parametrer.php +++ b/ecrire/public/parametrer.php @@ -177,11 +177,18 @@ function public_parametrer_dist($fond, $contexte='', $cache='', $connect='') { } -// si le champ chapo commence par '=' c'est une redirection. -// avec un eventuel raccourci Spip -// si le raccourci a un titre il sera pris comme corps du 302 - -// http://doc.spip.org/@tester_redirection +/** + * si le champ chapo commence par '=' c'est une redirection. + * avec un eventuel raccourci Spip + * si le raccourci a un titre il sera pris comme corps du 302 + * + * http://doc.spip.org/@tester_redirection + * + * @param string $fond + * @param array $contexte + * @param string $connect + * @return array|bool + */ function tester_redirection($fond, $contexte, $connect) { if ($fond == 'article' @@ -190,14 +197,23 @@ function tester_redirection($fond, $contexte, $connect) if ($m[0]=='=') { include_spip('inc/texte'); // les navigateurs pataugent si l'URL est vide - if ($url = chapo_redirige(substr($m,1), true)) + if ($url = chapo_redirige(substr($m,1), true)){ + // passer en url absolue car cette redirection pourra + // etre utilisee dans un contexte d'url qui change + // y compris url arbo + if (!preg_match(',^\w+:,', $url)) { + include_spip('inc/filtres_mini'); + $url = url_absolue($url); + } + $url = str_replace('&', '&', $url); return array('texte' => "<" . "?php header('Location: " - . texte_script(str_replace('&', '&', $url)) + . texte_script($url) . "'); echo '" - . addslashes($m[1]) - . "'?" . ">", + . addslashes($url) + . "'.\"\n\"?" . ">", 'process_ins' => 'php'); + } } } return false;