|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Inscrit
Inscription : juin 2006 Messages : 531 ![]() |
Bonjour,
Voilà j'ai un texte comme ça, par exemple : Code :
Je souhaite une grande {maison{ avec un jardin. Je souhaite que si le mot maison se trouve dans la table liens, il soit remplacé dans la chaîne précédente par un lien. Ce qui donne : Code :
Je souhaite une grande <a href="maison.htm">maison</a> avec un jardin. |
|
|
00
|
|
|
#2 | ||
|
Membre expérimenté
![]() Inscription : septembre 2006 Messages : 685 ![]() |
Un simple preg_replace je pense.
Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() |
Si j'ai bien suivi tu peux faire une fonction qui prend en argument la chaîne à modifier et dans la fonction tu fais une boucle sur toute la table (mysql_fecth_array()) pour remplacer les occurrences (str_replace,preg_replace) de la chaîne par les liens de ta table..
|
|
|
00
|
|
|
#4 |
|
Inscrit
Inscription : juin 2006 Messages : 531 ![]() |
Salut à vous, merci pour vos réponses.
Je ferais bien comme dit Xunil, mais avec son script il analyse tout le texte. N'est-ce pas possible de ne le faire que pour les mots délimités par {{ ? Cela économiserait des ressources je pense. |
|
|
00
|
|
|
#5 |
|
Membre expérimenté
![]() Inscription : décembre 2005 Messages : 742 ![]() |
En faisant un
Code :
str_replace($ton_mot, $ton_lien, $ta_chaine); |
|
|
00
|
|
|
#6 | |
|
Inscrit
Inscription : juin 2006 Messages : 531 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#7 | ||
|
Membre expérimenté
![]() Inscription : septembre 2006 Messages : 685 ![]() |
Si tu as des délimiteurs de mots, il suffit de les ajouter dans le masque en enlevant les \b.
Code :
preg_replace('#{(' . implode('|', $liste_mot) . '){#', '<a href="$1.htm">', $chaine); Donc, en 1er, il faut aller chercher les mots dans la table. Code :
|
||
|
|
00
|
|
|
#8 | ||
|
Inscrit
Inscription : juin 2006 Messages : 531 ![]() |
Bon alors, je fais mes tests en ligne et là le serveur est en maintenance dirait-on...
En attendant, qui peut m'expliquer le script de Xunil ? Code :
|
||
|
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() Inscription : septembre 2006 Messages : 685 ![]() |
Bon, à ce que je vois, t'y connais pas grand chose en expressions régulières
$liste_mot est vide car c'est une déclaration de variable, je déclare toujours mes variables dans mes scripts. Le pipe | , c'est pour le masque de la regex, et qui est un ou. Le $1 correspond à la 1ère parenthèse capturante du masque. |
|
|
00
|
|
|
#10 | ||
|
Inscrit
Inscription : juin 2006 Messages : 531 ![]() |
Ok alors je crois que c'est bon avec ce code là :
Code :
|
||
|
|
00
|
|
|
#11 | ||
|
Membre chevronné
![]() Étudiant Inscription : août 2005 Messages : 632 ![]() |
Autre solution possible :
Code php :
|
||
|
|
00
|
|
|
#12 |
|
Inscrit
Inscription : juin 2006 Messages : 531 ![]() |
Salut Korko fain,
C'est pour le fun ta soluce, ou elle est mieux, plus rapide pour le serveur par exemple ? |
|
|
00
|
|
|
#13 |
|
Membre chevronné
![]() Étudiant Inscription : août 2005 Messages : 632 ![]() |
Elle doit etre un poil plus lent (preg_replace plus lent que str_replace mais moins consommatrice de mémoire (enfin c'est infime pour des petits tableau). C'est surtout pour donner une autre solution pour dire qu'yen a rarement qu'une ^^
|
|
|
00
|
|
|
#14 | ||
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
S'il y a 1000 mots dans la table est trois liens dans la page sous la forme {xxx{, la fonction preg_replace_callback serait probablement moins gourmande dans la mesure où la vérification que xxxx est présent dans la base serait effectuée par la fonction de rappel :
Code :
|
||
|
|
00
|
|
|
#15 |
|
Inscrit
Inscription : juin 2006 Messages : 531 ![]() |
lol bah attendons qu'une bonne âme se lance sur le test alors...
Merci à vous en tout cas. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com