Liens automatiques dans un article

3 réponses
AuteurMessage

Charts in France |
Modérateur

 

Inscrit le : 09/05/2005

# Le 21/04/2008 à 16:00

Bonjour !

Je galère un peu pour afficher des liens automatiques dans des blocs de texte.
Pour être plus précis, j'ai une liste de mots dans une base de données qui renvoient vers une page précise.

Exemple :


"Madonna" renvoie vers "Madonna.html"
"Francis Cabrel" renvoie vers "Francis-Cabrel.html" etc...


J'ai mis en place une fonction PHP qui permet de remplacer dans un texte tous les mots contenus dans la base de données par le lien vers la page précise.

Exemple :

texte = "Vendredi prochain, Madonna sortira un nouvel album. Retrouvez plus d'infos sur <a href=\"www.madonna.com\">www.madonna.com</a>";

qui deviendra

texte_lien = "Vendredi prochain, <a href=\"Madonna.html\">Madonna</a> sortira un nouvel album. Retrouvez plus d'infos sur <a href=\"www.madonna.com\">www.madonna.com</a>";


J'ai mis en place la fonction suivante :

$req_mots = query("SELECT nom, lien FROM artist");
while ($res_mots = mysql_fetch_assoc($req_mots)) {
$link = '<a href="/'.$res_mots['lien'].'.html">'.$res_mots['nom'].'</a>';
$res_news['texte'] = preg_replace('#\b('.$res_mots['nom'].')\b#isU', $link, $res_news['texte']);
}


Je rencontre 2 problèmes :
- lorsque, comme dans l'exemple, j'ai une adresse genre www.madonna.com dans le texte, la fonction me remplace aussi le mot "madonna" entre les balises <a..></a>... Du coup, tout est cassé ! J'ai une URL dans un URL
- lorsque j'ai l'artiste "M", il va me remplacer tous les "m" de l'article, y compris les "m" de MaMan... Or, je voudrai qu'il me remplace uniquement " M " (avec rien autour).

Ca s'annonce compliqué...! Je pense que ma fonction preg_replace est mal utilisée, mais j'ai tenté pleins de choses, en vain.
Mais certains d'entre nous font peut être déjà ce genre de choses sur leur site, alors je demande votre aide ! Merci ;)

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 21/04/2008 à 16:16

commence par ajouter des espaces à ton texte.
$res_news['texte'] = ' ' . $res_news['texte'] . ' ';

ensuite tu modifies ton expression régulière pour vérifier qu'il y a des espaces autour.

puis à la fin tu vires les deux espaces de début et fin

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

tonguide | Jeremy
Modérateur

 

Inscrit le : 09/05/2005

# Le 21/04/2008 à 16:53

$res_news['texte'] = trim(preg_replace('#\b( ' . $res_mots['nom'] . ' )\b#isU', ' ' . $link . ' ', ' ' . $res_news['texte'] . ' '));


quelque chose du genre.

Charts in France | Olivier
Modérateur

 

Inscrit le : 09/05/2005

# Le 21/04/2008 à 23:45

Merci je vais tester ça

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 12:45:40 | Généré en 4.94ms | Contacts | Mentions légales |