Recréer des liens dans un texte.

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

Recréer des liens dans un texte.

Message le Mer Mai 02, 2007 14:50

Bonjour,

Voilà j'ai un texte comme ça, par exemple :

Code: Tout sélectionner
Je souhaite une grande {maison{ avec un jardin.


J'ai une table 'liens' avec 1000 mots.

Je souhaite que si le mot "maison" se trouve dans la table 'liens', il soit remplacer dans la chaîne précédente par un lien.
Ce qui donne :

Code: Tout sélectionner
Je souhaite une grande <a href="maison.htm">maison</a> avec un jardin.


Comment faire SVP :?:


serval2a
WRInaute accro
WRInaute accro
 
Messages: 3453
Inscription: Lun Mar 21, 2005 18:17

Message le Mer Mai 02, 2007 15:05

Bonjour,
Tu peux le faire depuis PHPmyadmin avec une requête UPDATE.
@+


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

Message le Mer Mai 02, 2007 15:11

Ca fonctionnera pas. Il faut un script qui relève le mot compris entre {{ et qui aille chercher dans la table 'liens' si ce mot s'y trouve et qui le cas échéant crée un lien à la place du {mot{.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12373
Inscription: Dim Aoû 08, 2004 20:24

Message le Mer Mai 02, 2007 15:18

avec un eregi_replace, après avoir vérifié que le mot existe dans la base


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

Message le Mer Mai 02, 2007 15:22

J'ai ça comme script :
Code: Tout sélectionner
$liste_mot = array('maison', 'voiture', 'vélo', 'jardin');

$chaine = 'Je souhaite une grande {maison{ avec un jardin.';

echo preg_replace('#\b(' . implode('|', $liste_mot) . ')\b#', '<a href="$1.htm">', $chaine);


L'inconvénient, c'est qu'il analyse tous les mots du texte, alors qu'il n'y a besoin de le faire que pour ceux délimité par {{


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12373
Inscription: Dim Aoû 08, 2004 20:24

Message le Mer Mai 02, 2007 15:24

il faut mettre les { dans le masque de recherche


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 869
Inscription: Mar Aoû 05, 2003 14:49

Message le Mer Mai 02, 2007 15:32

Leonick a écrit:avec un eregi_replace, après avoir vérifié que le mot existe dans la base

il semblerait que ereg disparaisse dans la future version de php, autant s'habituer à preg qui semble t-il est, en plus, bcp plus rapide ;)


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

Message le Mer Mai 02, 2007 15:35

Va pour preg, mais c'est pareil. Comment je fais pour mettre le { dans le masque de recherche, comme dit leonick, puisque je ne connais pas à l'avance le mot à remplacer dans la chaine. Ou pour mieux dire, j'ai des centaines de textes et dans chacun d'entre eux, les mots à remplacer sont délimités par {{ je n'en ai pas la liste d'avance, ça doit être détecté à l'affichage.


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

Message le Mer Mai 02, 2007 15:37

En fait il faut que le script fasse cela :
- Lecture du texte.
- Detection des éventuels {mot_a_remplacer_par_des_liens{
- recherche dans la table 'liens' du mot en question.
- Si il y est, on le remplace par un lien.


nalrem
WRInaute impliqué
WRInaute impliqué
 
Messages: 392
Inscription: Dim Avr 06, 2003 21:44

Message le Mer Mai 02, 2007 15:43

Tu as intérêt à commencer par stocker en une fois toute ta table dans un tableau php, sinon tu risque de faire des centaines d'appels à ta base de données s'il y a beaucoup de mots.
Ensuite avec une expression régulière tu cherches les motif {tonmot{ et tu le remplace s'il est dans le tableau généré à partir de ta base.


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

Message le Mer Mai 02, 2007 16:07

J'ai récupéré un script et je l'ai arrangé, mais ça fonctionne pas :

Code: Tout sélectionner
$sql = "SELECT libelle FROM liens ";
$result = mysql_query($sql);
$liste_mot = '';[color=blue] // pourquoi c'est vide ? [/color]
while( $liste = mysql_fetch_assoc($result) )
  $liste_mot .= $liste['mot'] . '|'; [color=blue]//c'est quoi ces .= et ce '!' ? [/color]
$liste_mot = rtrim($liste_mot, '|');

echo preg_replace('#{('.$liste_mot.'){#i', '<a href="$1.htm">', $texte);


A vrai dire, je pige pas d'où sort le $1 :oops:


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 869
Inscription: Mar Aoû 05, 2003 14:49

Message le Mer Mai 02, 2007 16:38

essaye ceci
Code: Tout sélectionner
$sql = "SELECT libelle FROM liens ";
$result = mysql_query($sql);
$search = array();
$replace = array();

while( $r = mysql_fetch_array($result) ) {
   $search[] = '{'.$r['libelle'].'{';
   $replace[] = '<a href="'.$r['libelle'].'">'.$r['libelle'].'</a>';
}

$texte = str_replace( $search, $replace, $texte );

:)


Chirurgien
WRInaute discret
WRInaute discret
 
Messages: 67
Inscription: Dim Sep 03, 2006 11:56

Message le Mer Mai 02, 2007 16:48

Meeuuuhhh a écrit:J'ai récupéré un script et je l'ai arrangé, mais ça fonctionne pas :

Code: Tout sélectionner
$sql = "SELECT libelle FROM liens ";
$result = mysql_query($sql);
$liste_mot = '';[color=blue] // pourquoi c'est vide ? [/color]
while( $liste = mysql_fetch_assoc($result) )
  $liste_mot .= $liste['mot'] . '|'; [color=blue]//c'est quoi ces .= et ce '!' ? [/color]
$liste_mot = rtrim($liste_mot, '|');

echo preg_replace('#{('.$liste_mot.'){#i', '<a href="$1.htm">', $texte);


A vrai dire, je pige pas d'où sort le $1 :oops:


le "$1" sera remplacé par ce qui est entre parathèses dans ton critère de recherche soit ici : ('.$liste_mot.')

pour en savoir plus recherche des infos sur les expressions régulières ;)


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

Message le Jeu Mai 03, 2007 12:05

Ok, alors merci à tous, je crois que ça fonctionne.

Je dois m'occuper d'un autre script en urgence, mais avec le bout de code de julienr c'est bon.

A tout hasard, un preg_replace() ne serait pas mieux qu'un str_replace() ?

Merci à vous en tout cas :-)


Leonick
WRInaute accro
WRInaute accro
 
Messages: 12373
Inscription: Dim Aoû 08, 2004 20:24

Message le Jeu Mai 03, 2007 12:16

preg_replace est prévu pour une utilisation plus poussée, du genre références arrières, etc...
Là, vu qu'on remplace un mot par un autre, quand il existe, str_replace() est le plus adapté

Recréer des liens dans un texte.

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :

  • Partenaires pour échanges de liens
    Cet outil vous liste quelques sites qui font des liens vers des sites similaires au vôtre, pour vous aider à trouver des partenaires pour des échanges de liens.
  • Calcul du taux de liens vers des pages internes
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.
  • Analyse des backlinks
    Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
  • Recherche de citations d'un site en texte brut
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités