REGEX : je m'arrache les cheveux...

WRInaute occasionnel
Bonjour,

Je suis en train de passer un site de joomla vers un truc fait maison parce que joomla est un peu trop rigide à mon goût malgré les millions de modules, plugins, templates....

Les liens dans la base de données sont du type :

Code:
<a href="index.php?option=com_content&amp;view=article&amp;id=71:la-cellule-phtovoltaique&amp;catid=47:fonctionnement-solaire&amp;Itemid=64">photovoltaïques</a>

et je veux avoir des liens du style

Code:
<a href="/solaire/fonctionnement/71-la-cellule-phtovoltaique.html">photovoltaïques</a>

J'ai donc crée une fonction pour faire le travail parce que je suis un gros fainéant et que je voulais pas tout faire à la main (mais finalement, je me demande si ça ne m'aurait pas pris moins de temps)...

Voici ce que j'ai sorti de ma petite tête...

Code:
<?php
	error_reporting(E_ALL);
	session_start();
	require_once('*****.php5');			//script d'appel de la base

	$sql_article = "SELECT id, introtext
			FROM `article`
			GROUP BY id
			ORDER BY `id` DESC
			LIMIT 0 , 10";
	$articles = mysql_query ($sql_article);

	function renomme($match) 
	{
	    	list($_unused, $lamerde, $idart, $lamerde2, $texte) = $match;
		$sql_lien = "SELECT a.id, a.alias as aalias, t.alias as talias, c.alias as calias
				FROM `article` a, themes t, categories c
				WHERE t.id = a.sectionid
				AND c.id = a.catid
				AND a.id = " . $idart . "
				GROUP BY a.id";
		$liens = mysql_query ($sql_lien);
		$lien = mysql_fetch_assoc($liens);
	    	return '<a href="'.$lien['talias'].'/'.$lien['calias'].'/'.$lien['id'].'-'.$lien['aalias'].'.html">'.$texte.'</a>';
	}

	while ($article=mysql_fetch_assoc($articles))
	{
		$article['introtext'] = preg_replace_callback('#<a href="index\.php\?(.*)&amp;id=(\d+):(.*)">(.*)</a>#', 'renomme', $article['introtext']);
		echo utf8_decode($article['introtext']);
	}
?>

Cela marche pour le lien donné au dessus mais pas pour celui-ci :

Code:
<a href="index.php?option=com_content&amp;view=article&amp;id=145:le-bois&amp;catid=68:biomasse&amp;Itemid=84">bois</a>

Merci pour tous les commentaires qui pourraient me mettre sur la piste de l'origine de ce dysfonctionnement que je commence à considérer comme magique malgré mon esprit cartésien...
 
WRInaute occasionnel
En fait, il ne considère que le &amp;id=(\d+) du lien suivant (qui est le dernier si cela peut avoir une quelconque influence)... Je ne sais pas si c'est clair mais disons que dans l'analyse de l'expression rationnelle, il ne "s'arrête" pas sur le lien qui concerne le bois. La fonction s'exécute donc mais avec un $idart qui est une chaîne...

J'ai essayé de délimiter l'expression avec des ^ et des $ mais dans ce cas-là, rien ne fonctionne...

Merci pour ton aide.
 
WRInaute passionné
J'ai pas vraiment bien compris ce que tu voulais dire, mais essai ça :

#<a href="index\.php\?([^"]*)&amp;id=(\d+):([^"]*)">([^<]*)</a>#si
 
WRInaute occasionnel
merci, l'erreur fut différente mais cela (ajouter au repas) m'a mis sur la piste d'une erreur dans la base de données... les sectionid n'existaient plus dans la base theme...

encore merci et désolé du dérangement...
 
Discussions similaires
Haut