Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/08/2011, 14h16   #1
Invité de passage
 
Homme Jonathan Zimmermann
Inscription : juin 2011
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme Jonathan Zimmermann
Localisation : Suisse

Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
Par défaut Ajout automatique de liens

Bonjour,

Je gère un site d'articles HTML dans une base de données. Chaque article possède un nom, et ce nom est cité dans d'autres articles.
J'aimerais donc qu'à chaque fois que ce nom est cité dans un autre article, un lien automatique soit créé.

J'ai donc un truc du genre :

Code :
1
2
3
4
5
6
7
8
 
 
$requete = mysql_query("SELECT * FROM remplacements");
 
		while($rep = mysql_fetch_array($requete))
			{
				$contenu = preg_replace("#\\b(".$rep['rep_search'].")\\b#i", "<a href='article.php' >" . $rep['rep_replace'] . "</a>", $contenu);
			}
Ca fonctionne très bien, excepté dans deux cas...

- Quand l'article est déjà linké. Par exemple si quelqu'un écrit un article, insère un lien dedans vers un autre des articles existants déjà, mon bout de code va le retransformer en lien et on va avoir 2 liens imbriqués.
- Quand le nom de l'article se retrouve à l'intérieur d'une balise HTML. Exemple : si je met une image avec un title="Image de l'article Bla bla", l'article bla bla va être linké et ça va corrompre l'image...

Il faudrait donc exclure de la recherche regex tout ce qui se trouve à l'intérieur de <a></a> et tout ce qui se trouve à l'intérieur de <>, mais je n'arrive pas à grand chose car tout ce que je fais ne fonctionne pas :/

Merci d'avance de votre aide,

7804j
7804j est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2011, 16h19   #2
Membre éprouvé
 
Avatar de guigo
 
Inscription : juin 2006
Messages : 606
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 606
Points : 479
Points : 479
Salut,
tout dépend de ta priorité... Si tu veux rewrite tout les liens le plus simple et de nettoyer ton article avant le linking. Tu fais une expression régulière qui supprime toute t'es <a></a> et une qui renomme ton tilte de <img />

Guigo
guigo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 10h30   #3
Invité de passage
 
Homme Jonathan Zimmermann
Inscription : juin 2011
Messages : 20
Détails du profil
Informations personnelles :
Nom : Homme Jonathan Zimmermann
Localisation : Suisse

Informations forums :
Inscription : juin 2011
Messages : 20
Points : 3
Points : 3
Non, justement, je dois garder ces liens car certains sont importants, idem pour les title des images (car des fois, c'est même le nom de l'image, et ça c'est dur à changer).

Le plus sûr serait donc de faire une REGEX qui n'affecterait que les cas ne posant pas de problème, mais c'est aussi le plus compliqué bien sûr, raison de ma venue ici :/
7804j est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 20h41   #4
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 568
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 568
Points : 2 493
Points : 2 493
Bonjour,

Tu peux t'inspirer du code ci-dessous :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$in = '...'; // Page HTML
 
$array = preg_split('/(<[^>]+>)/', $in, -1, PREG_SPLIT_DELIM_CAPTURE);
 
$result = '';
foreach ($array as $item) {
  if (strpos($item, '<') === false) {
    $item = str_replace('mot', '<a href="lien.php">mot</a>', $item);
  }
 
  $result .= $item
}
 
echo $item;
?>
Non testé
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h37.


 
 
 
 
Partenaires

Hébergement Web