From fea09e39298192e2922f94e06147acaf4f686d5c Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 11 Apr 2005 09:15:43 +0000
Subject: [PATCH] =?UTF-8?q?deux=20filtres=20permettant=20de=20passer=20des?=
 =?UTF-8?q?=20liens=20relatifs=20aux=20liens=20absolus,=20=C3=A0=20la=20fo?=
 =?UTF-8?q?is=20quand=20on=20parle=20de=20[(#URL=5FARTICLE|url=5Fabsolue)]?=
 =?UTF-8?q?=20ou=20d'un=20texte=20complet=20[(#TEXTE|liens=5Fabsolus)]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Je n'ai malheureusement pas vu comment unifier les deux filtres sans risque d'erreur, mais je n'ai pas les yeux en face des trous ce matin :)

Et pour le féminin/pluriel, je ne suis pas persuade non plus d'avoir fait le bon choix. A l'aide !
---
 ecrire/inc_filtres.php3 | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index 2f0fc43645..61cb9e8d05 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -883,4 +883,39 @@ function calendrier($date='', $type='mois', $echelle='', $partie_cal='', $script
      http_calendrier_init($date, $type, $echelle, $partie_cal, $script);
 }
 
+// un filtre pour transformer les URLs relatives en URLs absolues ;
+// ne s'applique qu'aux #URL_XXXX
+function url_absolue($url) {
+	$url = trim($url);
+
+	if (preg_match(',^[a-z0-9]+://,i', $url))
+		return $url;
+
+	$site = lire_meta('adresse_site');
+	if ($url[0] == '/') {
+		if (preg_match(',^([a-z0-9]+://)(.*?/)?,i', $site.'/', $regs))
+			$host = $regs[1].$regs[2];
+		else
+			$host = $site.'/';
+		return $host.substr($url,1);
+	}
+
+	return $site.'/'.$url;
+}
+
+// un filtre pour transformer les URLs relatives en URLs absolues ;
+// ne s'applique qu'aux textes contenant des liens
+function liens_absolus($texte) {
+	if (preg_match_all(',(<a[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),ims', 
+	$texte, $liens, PREG_SET_ORDER)) {
+		foreach ($liens as $lien) {
+			$abs = url_absolue($lien[2]);
+			if ($abs <> $lien[2])
+				$texte = str_replace($lien[0], $lien[1].$abs.$lien[3], $texte);
+		}
+	}
+	return $texte;
+}
+
+
 ?>
-- 
GitLab