Page 1 sur 2

Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 13 août 2009, 18:57
par uspy62
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.

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 13 août 2009, 22:46
par jojolapine
Alors déjà se sont des expressions régulières (ça ira mieux pour rechercher des tutos ;) )
Et voici un tutoriel, ainsi qu'un testeur d'expression régulière: http://lumadis.be

Mais avant de te lancer là-dedans, explique nous un peu le pourquoi du comment? parcequ'il y a peut-être plus simple...?
Donne nous plus d'infos ;)

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 00:07
par Victor BRITO
Et preg_replace (), elle sert à quoi ? ;)

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:09
par uspy62
Bonjour et merci pour ta réponse.
Je n'avais pas vu preg_replace, c'est vrai que ça a l'air de correspondre à ce que je recherche mais ça fonctionne encore avec des expressions régulières ...
J'ai beau testé cette fonction je ne comprends pas trop les expressions régulières, je n'ai jamais été doué pour ça.

J'ai mon texte :
$texte = stripslashes($page['html']);

Je sais ce que je veux remplacer :
<a href="monsite.fr" title="mon site">Cliquez ici</a> par <a href="monsite.fr/1/564" title="monsite">Cliquez ici</a>

Donc si j'ai bien compris tout va se jouer dans le pattern (et là je coince) :
$pattern = '';

Ma chaîne de remplacement (je coince aussi) :
$replacement = '';

Et mon nouveau texte :
$nouveau_texte=preg_replace($pattern, $replacement, $texte);

En fait je bloque juste au niveau des expressions régulières (juste = complétement perdu).

Pouvez-vous m'aiguiller un tout petit peu ?

Merci d'avance.

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:11
par jojolapine
Es-tu allé lire le tutoriel que je t'ai linké, as-tu fait des essais via le testeur?

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:12
par uspy62
Alors déjà se sont des expressions régulières (ça ira mieux pour rechercher des tutos ;) )
Et voici un tutoriel, ainsi qu'un testeur d'expression régulière: http://lumadis.be

Mais avant de te lancer là-dedans, explique nous un peu le pourquoi du comment? parcequ'il y a peut-être plus simple...?
Donne nous plus d'infos ;)
Le pourquoi du comment, c'est tout simple.
J'ai créé une newsletter en html et avant de l'envoyer je veux mettre des paramètres dans les url pour pouvoir faire des statistiques.
Donc une newsletter en html avec des <a href="..."> un peu partout dedans et moi qui veut mettre des paramètres dans ce href pour mes stats, je ne vois pas plus simple.

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:16
par uspy62
Es-tu allé lire le tutoriel que je t'ai linké, as-tu fait des essais via le testeur?
Je suis en train de faire des tests mais je t'avoues que je galère pas mal.

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:22
par uspy62
Bon voilà apparement j'ai trouvé ce qu'il me fallait grâce à ton tuto :
#<a href="(.*?)"#

ça me retourne tout ce qui commence par <a href=" et qui finit par " donc en gros ça me retourne <a href="www.monsite.fr"
Maintenant il me reste à remplacer cette chaine par <a href="www.monsite.fr/1/564" et le tour sera joué.

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:28
par jojolapine
Bon alors y a peut-être plus simple que de te mettre aux expressions régulière (mais tu peux essayer pour le fun malgrès tout ;) )
Pourquoi ne pas mettre dans ta Bdd directement dans ton html par exemple:

Code : Tout sélectionner

<a href="%URL_SITE%%CODE_STATISTIQUES%">gflerzgh</a>
Ensuite avant l'envoi, tu as simplement à faire un str_replace():
<?php
$letter_html="Hello %NOM_USER%,<br />
Va sur mon <a href=\"%URL_SITE%%CODE_STATISTIQUES%\" title=\"mon super site\">super site</a>.<br />
Merci";

// Remplacement des paramètres

$letter_html=stre_replace('%URL_SITE%','http://monsite.fr',$letter_html);
$letter_html=stre_replace('%CODE_STATISTIQUES%','/x/y',$letter_html);
$letter_html=stre_replace('%NOM_USER%','tartampion',$letter_html);
Comme ça c'est plus simple et surtout plus performant ;)

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:34
par uspy62
Je ne peux malheureusement pas faire ça.
Pour créer ma newsletter j'utilise un éditeur wysiwyg, de plus je ne suis pas le seul à créer des newsletters et en plus je voudrais que ça se fasse automatiquement.
Donc avec l'éditeur wysiwyg, je rentre l'url du href donc je ne peux pas rentrer de paramètre en plus.

J'espère que tu comprendras ce que je veux dire.

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:39
par jojolapine
Ben pourtant c'est aussi simple de tapper %URL_SITE% que monsite.fr non?
Les autres utilisateurs peuvent comprendre facilement ;)

Bon après j'ai peut-être pas tout en main, mais tu peux afficher les variables à leurs disposition, et ensuite ben il les mettents ou pas...

Bref si tu veux toujorus utilise les expressions régulières, pour le replace, il faut que tu utilises $1 pour remettre ce qui a été capturé entre les parenthèses ;)

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:41
par uspy62
Voilà j'ai trouvé avec preg_replace()

//je met mon pattern href="www.monsite.fr"
$pattern='#href="(.*?)"#';
//je le remplace par href="www.monsite.fr/1/564"
$replacement='href="$1/1/564"';

//je procède au remplacement
$nouvelle_newsletter=preg_replace($pattern, $replacement, $newsletter_strip);

Voilà ça me sort le bon résultat.
Je ne pensais pas que ça allait être aussi simple.

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:43
par jojolapine
Bravo en tout cas ;)
Mais je reste persuadé que tu pourrais t'en sortir avec de simples str_replace ;)
En tout cas tu as vite compris les expressions régulières, c'est pas souvent que ça rentre aussi bien :)

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 09:55
par uspy62
Bravo en tout cas ;)
Mais je reste persuadé que tu pourrais t'en sortir avec de simples str_replace ;)
En tout cas tu as vite compris les expressions régulières, c'est pas souvent que ça rentre aussi bien :)
Merci pour ton aide et ton lien vers les tutos (très bien fait).
Pour les str_replace() je trouve que ça fait faire des manips en plus aux personnes qui créent les newsletters et qui ne sont pas forcément doués à la base donc si on leur demande encore une chose en plus, ça devient vraiment compliqué. L'avantage avec les expression régulières c'est que l'intervention humaine n'est pas nécessaire donc pas de manip en plus.

En tout merci pour ton aide, je viens de tester en grandeur nature sur une newsletter et ça fonctionne parfaitement.

Sujet clos.

Re: Remplacer tout ce qui se trouve entre href"" dans une page

Posté : 14 août 2009, 10:31
par FuZZyLine
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 .= "&agrave; l'un de ses &eacute;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&eacute; :";
 $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