Page 1 sur 1

comprendre une fonction regexp

Posté : 25 mars 2009, 14:05
par Invité
Bonjour à tous,

Je souhaite modifier une fonction trouvée dans un logiciel open source:
	function convertInternalLink($body)
	{
		global $mainframe;

		$patterns = array();
		$replacements = array();
		$i = 0;
		$href_exp = "/href=\"(.*?)\"/";
		$link_exp =  "[^http:\/\/www\.|^www\.|^http:\/\/]";

		preg_match_all($href_exp, $body, $out, PREG_SET_ORDER);

		foreach ($out as $val)
		{
			$links = preg_match($link_exp, $val[1], $match, PREG_OFFSET_CAPTURE);

			if(!$links)
			{
				$patterns[$i] = 'href="'. $val[1] . '"';
				$replacements[$i] = 'href="'. JURI::root().$val[1] . '"';
				$body=str_replace($patterns[$i],$replacements[$i],$body);
				$i++;
			}
		}
		return $body;
	}
}
C'est une fonction qui traite du texte ($body) saisi à partir d'un éditeur wysiwig, dans le but de modifier les liens hypertextes.

Mon problème: lorsque je crée mon texte ($body), les liens sont comme ceci:
http://www.mondomaine.com/index.php?option=com_virtuemart&page=shop.browse&category_id=54&Itemid=2&lang=fr
Après passage dans la fonction, le même lien ressort comme ceci:
http://index.php/?option=com_virtuemart&page=shop.browse&category_id=54&Itemid=2&lang=fr
2 changements:
1- www.mondomaine.com/ a été supprimé de l'url
2- index.php? est devenu index.php/?

Je suppose que c'est la fonction ci dessus qui n'est pas au point, mais pas de support pour le logiciel.
Je viens donc poster ici, cherchant de l'aide pour comprendre la fonction et modifier ce qui ne fonctionne pas bien.

Merci à tous pour quelques conseil éclairés.

Posté : 03 avr. 2009, 11:50
par Innocentus
Tu ne dois pas utiliser une expression regulare pour l'extraction des liens hypertextes.
Mais tu peux utiliser une parser html: PHP Simple HTML DOM Parser

Inno

Posté : 18 avr. 2009, 17:40
par Invité
pourquoi ne faut il pas utiliser une rexpression regulier pour les liens?

Posté : 21 avr. 2009, 15:57
par Invité
personne ne confirme ou ne contredit ce qu'a dit innocentum?

Posté : 21 avr. 2009, 16:36
par zeus
Effectivement, je me demande pourquoi il ne faut pas utiliser d'ER :-k

Je ne donne pas de jugement sur la solution de Innocentus, mais les expressions régulières peuvent convenir tout de même ;)

Posté : 22 avr. 2009, 14:15
par Ryle
Bah en ce qui me concerne, je vais en porter un de jugement, vu que par curiosité j'ai téléchargé l'bidule en question pour voir comment il fonctionnait. Résultat, pas moins de 8 appels à preg_match() ou preg_match_all() et patterns associés... :-*

Je vois pas bien l'intérêt de recommander une solution qui repose sur des expressions régulières pour éviter l'usage d'une ER ... A part coller 1000 lignes de code supplémentaire à interpréter dans les dents de php, va vraiment falloir chercher pour trouver un argument convaincant :-s