Salut,
Bonjour à tous,
J'ai un petit problème depuis quelques jours, j'ai un contenu html stocké dans ma base de données, dans ce contenu html j'ai pas mal de liens <a href="...">
J'aimerais pouvoir remplacer tout ce qui se trouve à l'intérieur de href"" de cette manière :
exemple :
<a href="
www.monsite.fr" title="Lien vers mon site">Cliquez sur le lien</a>
par <a href="
www.monsite.fr/1/500" title="Lien vers mon site">Cliquez sur le lien</a>
J'ai testé avec pas mal de fonction php mais sans vraiment réussir à obtenir ce que je voulais.
J'ai vu qu'il existait la fonction preg_match_all qui doit servir à ça à mon avis mais je ne comprends pas trop comment l'utiliser, apparement ça fonctionne avec les expressions rationnels donc ça pourrait correspondre à ce que je recherche.
Merci d'avance pour vos réponses.
Ci après est un exemple rapide de ce que peut donner un remplacement entre <a href...> mais ceci implique
une chaine de remplacement identique donc je doute que ce soit ce que tu cherches:
<?php
$dta = "<a href=\"./envoyer.php\" id=\"envoyer\" title=\"Envoyer...\">Envoyer</a> de bon ";
$dta .= "matin un lien <a href=\"./modifier.php\" id=\"modifier\" title=\"Modifier...\">modifier</a> ";
$dta .= "ne peut qu'amuser comme disait le penseur <a href = \"./xara.php\" id=\"xara\" ";
$dta = "title=\"Xara...\">Xara</a> ";
$dta .= "à l'un de ses étudiant.<br />";
$delim = "~";
$strNewTxt = "un_texte";
$pattern = "".$delim."<a[ ]*?href[ ]*?=[ ]*?\"(.*?)\"".$delim."";
$dtaNew = preg_replace($pattern, "<a href=\"$1?".$strNewTxt."\"", $dta);
$cde = "<h2>\n";
$cde .= " Exemple... Forme originale :\n";
$cde .= "</h2>\n";
$cde .= "<em>\n";
$cde .= $dta."\n";
$cde .= "</em>\n";
$cde .= "<br />\n";
$cde .= "<hr />\n";
$cde .= "<h2>";
$cde .= " Exemple... Forme modifieé :";
$cde .= "</h2>\n";
$cde .= "<em>\n";
$cde .= $dtaNew."\n";
$cde .= "</em>\n";
$cde .= "<br />\n";
$cde .= "<hr />\n";
echo $cde;
?>
Au vu de ton dernier message j'essaie une approche didactique... (j'essaie en tout cas...)
1) Le pattern doit être ouvert & fermé par des délimitateurs -ceux-ci doivent être uniques et identiques-
2) Les occurences sont notées par le signe $ et commencant par 1 et sont/peuvent être trouvées par les parenthèses.
3) Les crochets indiquent 1 (et un seul) caractère suivit par (ou pas d'espace(s): *?
Les caractères d'échappement sont notés \ mais bon, ca tu sais donc : nc.
Voila, l'exemple ci-dessus est bateau mais j'ai tenté de le faire facile donc compréhensible, à toi
de le modifier et "surtout" de l'adapter à tes besoin.
Ce qui (j'imagine) est d'ajouter quelque chose après le lien en fonction de la valeur ID du A en ce cas
le preg_ pour un tel remplacement semble un brin léger... Je te conseille plus tôt de faire un while
et boucler sur une liste d'ID liés au texte à ajouter.
Je me relis mais ca devient de moins en moins clair ce que je dis lol
J'espere en tout cas avoir donné une piste.
Bon code @+
PS: Effectivement preg_match_all peut être aussi utilisé dans ce cas il te suffirait de cibler ta
chaine LINK dans le tableau résultant, de lui ajouter ce que tu veux, puis faire une sorte d'implode
mais ce me semble bcp (bcp) moins efficace que ma proposition... 'fin à toi de voir
PS2: jojolapine tu m'as grillé lol Gratz, il est vrai que ta solution est carrément plus facile ET rapide