Transformer automatiquement des mots en lien.

Nouveau WRInaute
Bonjour,

Je cherche soit un script tout fait soit une piste pour en développer un.
Je veux en fait pouvoir automatiquement remplacer dans une zone de texte certains mots par des liens.

Par exemple je poste une news du type...

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec molestie.
Sed aliquam sem ut arcu. Phasellus sollicitudin. Vestibulum condimentum
facilisis nulla. In hac habitasse platea dictumst. Nulla nonummy. Cras quis
libero. Cras venenatis. Aliquam posuere lobortis pede. Nullam fringilla
urna id leo. Praesent aliquet pretium erat. Praesent non odio. Pellentesque
a magna a mauris vulputate lacinia. Aenean viverra. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos.
Aliquam lacus. Mauris magna eros, semper a, tempor et, rutrum et, tortor.

et je veux que sur le site (Php / Mysql) apparaisse

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec molestie.
Sed aliquam sem ut arcu. Phasellus sollicitudin. Vestibulum condimentum
facilisis nulla. In hac habitasse platea dictumst. Nulla nonummy. Cras quis
libero. Cras venenatis. Aliquam posuere lobortis pede. Nullam fringilla
urna id leo. Praesent aliquet pretium erat. Praesent non odio. Pellentesque
a magna a mauris vulputate lacinia. Aenean viverra. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos.
Aliquam lacus. Mauris magna eros, semper a, tempor et, rutrum et, tortor.

Où en bleu on trouve des liens vers des articles en rapport avec les mots.
En fait c'est un système équivalent aux nouveaux formats pubs de type Intellitxt mais adapté au surf sur un même site.

Merci d'avance pour votre aide.
 
WRInaute accro
En php tu te définis une sorte de dictionnaire de mot, et les url terminales relatives à ces mots, et tu fais un recherche-remplacer dans ton contenu avant de l'afficher.

Le but étant de remplacer chaque occurence d'un mot présent dans le "dictionnaire" par un lien vers la page qui correspond à ce mot.

Le tout lié à un système de cache pour pas trop surcharger.
 
WRInaute accro
basiquement tu fais un tableau avec les mots et un simple str_replace devrait suffir. Tout depend de la quantité de mots que tu dois remplacer ?

$texte = str_replace("mot","<a href="">mot</a>",$texte);
 
WRInaute accro
O!! 10 000 mots... preg devrait etre 10 à 20 fois plus rapide.

preg_replace('`\b'.$mot.'\b`i','<a href="http://www.site.com/index.php?val=$0">$0</a>',$texte);
 
WRInaute passionné
J'ai ce script justement...

Je te donnes quelques piste pour ne recherché que les mots qui t'intéresse sans tous les passer à la moulinette.

Dans un premier temps, tu récupère tous les mots de ton texte :

Code:
$mots_texte = preg_split('#([\s/\[\]\\\@.,(){}><]+)#Us', $value, -1, PREG_SPLIT_NO_EMPTY); // Découpe du texte pour récupéré les mots séparés (pas de séparation des apostrophes)	
$mots_texte_bis = preg_split('#([\s/\[\]\\\@.\',(){}><]+)#Us', $value, -1, PREG_SPLIT_NO_EMPTY); // Découpe du texte pour récupéré les mots séparés (séparation des apostrophe)
$mots_texte = array_merge($mots_texte, $mots_texte_bis); // On combine les deux tableaux créés
$mots_texte = array_unique($mots_texte); // On ne garde qu'une occurrence de chaque mot
$mots_texte = array_slice($mots_texte, 0); // On réindexe le tableau à partir de 0

Ensuite tu filtre un peu cette liste selon tes besoins (dans l'exemple, on ne garde que les mots de 2 caractères minimum, qui contiennent au moins une lettre, mais pas de chiffre) :

Code:
$mots_defin = '';
$total_mots_texte = count($mots_texte);
	
for ($nb = 0; $nb < $total_mots_texte; $nb ++) {
  if (mb_strlen($mots_texte[$nb]) >= 2 && preg_match('#[a-zA-Z]#U', $mots_texte[$nb]) && !preg_match('#[0-9]#U', $mots_texte[$nb]) ) {
    $mots_defin .= $mots_texte[$nb].', '; // Préparation de la chaine de requête

Maintenant que tu sais quels mots auront éventuellement un lien tu envoi une requête SQL vers ta liste de mots.
Dans mon cas, je tiens compte compte de la casse par exemple la planète Mars n'est pas le mois de mars... je tiens compte aussi de la possibilité qu'un terme puisse être retrouvé à partir de plusieurs forme (homonyme, pluriel, etc.). Je te laisse cherché un peu si tu veux adpaté cela à ton cas.

Pour faire simple, dans une table, tu as les champs suivant :

:arrow: le mot ou le groupe de mots sur lequel mettre un lien
:arrow: une liste de mots clés ou groupe de mots séparé par une virgule

Dans une autre, tu as une occurence de chaque mots séparé de tes mots clés avec l'identifiant correspondant ; c'est dans cette table que tu fera la recherche des termes de ton texte avec un WHERE cherche_mot IN('') en faisant un tri descendant pour mettre les mots les plus long au début ORDER BY Length(terme_lien) DESC.

Maintenant on crée un tableau contenant, tes occurences accompagné de leurs mots-clés :

Code:
while ($terme = mysqli_fetch_assoc(ta_requête)) {
$defin[] = array('keyword' => $terme['defin_keywords'], // Mots clés
			'terme'	=> $terme['defin_nom']); // Nom
}

Il ne te reste plus qu'à mettre tes liens en place :

Code:
/* ****************************************************************************
- comparaisonNombreCaractere($value_1, $value_2)
- Permet de trier un tableau en fonction du nombre de caractère (tri ascendant)
- À utiliser avec « usort() »
- Dernière version : 22/09/07

-$value_1 : Première valeur
-$value_2 : Seconde valeur
**************************************************************************** */
function comparaisonNombreCaractere($value_1, $value_2) {

	if (mb_strlen($value_1) == mb_strlen($value_2)) {
		return 0;
    }
	
	if (mb_strlen($value_1) > mb_strlen($value_2)) {
		return -1;
	} else {
		return 1;
	}
}

		
	// Mise en place du lien vers la définition du glossaire
	if (isset($defin) ) {
		$total_defin = count($defin);
		
		for	($nb = 0; $nb < $total_defin; $nb ++) {
			unset($keywords, $keywords_majus);
			
			// Création du tableau de mots clés
			$keywords_defaut = preg_split("/(, +)/", $defin[$nb]['keyword'], -1, PREG_SPLIT_NO_EMPTY); // Découpe des mots et expressions et mise dans un tableau
			
			// Création d'un second tableau avec une majuscule en début de chaque valeur
			$total_keywords_defaut = count($keywords_defaut);
			
			for	($nb_1 = 0; $nb_1 < $total_keywords_defaut; $nb_1 ++) {
				$keywords_majus[] = majuscule($keywords_defaut[$nb_1]);
			}
			
			$keywords_liste = array_merge ($keywords_defaut, $keywords_majus); // Fusion des deux tableaux précédents
			array_unique ($keywords_liste); // On ne garde qu'une occurence de chaque mots
			usort ($keywords_liste, 'comparaisonNombreCaractere'); // Tri ascendant en fonction du nombre de caractères
			
			// Création de la liste de mots clés formatée pour la recherche				
			$keywords = '';
			$total_keywords_liste = count($keywords_liste);
			
			for ($nb_1 = 0; $nb_1 < $total_keywords_liste; $nb_1 ++) {
				$keywords .= $keywords_liste[$nb_1].'|'; // préparation de la chaine des mots à recherché
			}
			
			// Mise en plce du lien une seule fois par terme
			$value = preg_replace('#(^|[\s\b\'(>])('.$keywords.')([\s\b.\],)<]|$)#U', '<a href="http://www.site.com/$1.html</a>', $value, 1);
		}
	}

Mon script est assez complexe et je ne t'ai donné que ce qui peut t'intéressé. Désolé de ne pas te dévoiler la totalité, mais j'y est passé plus de 200 heures de recherche et de codage pour le finaliser.

Par contre pense à faire une bonne mise en cache si tu as de très grandes pages.

Espérant avoir pu t'aider :wink:
 
WRInaute occasionnel
OUI, une reco pour moi aussi.
Il y a de très bonnes idées dans ce script, notemment :
"Dans mon cas, je tiens compte compte de la casse par exemple la planète Mars n'est pas le mois de mars... je tiens compte aussi de la possibilité qu'un terme puisse être retrouvé à partir de plusieurs forme (homonyme, pluriel, etc.)".

Merci medium69
 
WRInaute accro
merci pour ce code, surtout pour recuperer les mots, moi je me contentais d'un simple split("[^[:alpha:]]+", $texte)... et bien sur ca ne prenait pas les apostrophes en consideration...

par contre le coté j'enlève les mots de 2 caracteres je trouve ca trés bof
perso j'utilise cette liste:
http://www.ranks.nl/stopwords/french.html
et j'enleve les mots que je ne veux pas en 1 fois
array_diff($regs,$table_mots_bannis)

pour le reste j'ai pas suivie ton raisonnement
je me contente de recherche les mots qui ont le plus d'occurence et je fais mes liens;

Code:
// groupe les Mots-clés identiques et on les compte
$stats = array_count_values($regs);
// trie par ordre croissant la liste
array_multisort($stats, SORT_DESC);
// crée un tableau avec les clés du tableau correpondants aux mots clés
$tabKey = array_keys($stats);

apres je fais les liens sur les mots et basta...

tu as une url pour ton appli en production ?
 
WRInaute passionné
KOogar a dit:
tu as une url pour ton appli en production ?

Mon site :wink:

Par contre je le répète, il faut une bonne mise en cache car certains traitement peuvent être long.

Sur certaines de mes page, le traitement peut prendre jusqu'à 10 secondes. Il faut dire que je ne me contente pas uniquement de cela...
 
WRInaute passionné
KOogar a dit:
par contre le coté j'enlève les mots de 2 caracteres je trouve ca trés bof
perso j'utilise cette liste:
http://www.ranks.nl/stopwords/french.html
et j'enleve les mots que je ne veux pas en 1 fois
array_diff($regs,$table_mots_bannis)

pour le reste j'ai pas suivie ton raisonnement
je me contente de recherche les mots qui ont le plus d'occurence et je fais mes liens;

Code:
// groupe les Mots-clés identiques et on les compte
$stats = array_count_values($regs);
// trie par ordre croissant la liste
array_multisort($stats, SORT_DESC);
// crée un tableau avec les clés du tableau correpondants aux mots clés
$tabKey = array_keys($stats);

Je vais étudier cela pour optimiser mes scripts.
 
WRInaute accro
le résultat est magnifique et grandement pertinant

pourquoi faire une mise en cache ? c'est à chaque nouvelle insertion de documents qu'il faut placer les liens et la mise à jour est déjà dans la table sql.
 
WRInaute passionné
KOogar a dit:
le résultat est magnifique et grandement pertinant

pourquoi faire une mise en cache ? c'est à chaque nouvelle insertion de documents qu'il faut placer les liens et la mise à jour est déjà dans la table sql.

Disons que je ne me contente pas uniquement de mettre des liens...

Au sujet des liens, parfois, il ne faut pas que le mot soit pris en compte car dans le contexte il ne veut pas dire la même chose. dans ce cas, j'insère un filtre « § » juste à côté de ce mot ; il est enlevé avant la mise en page.
De même un terme contenu dans une url, un attribut, etc. ne doit pas être pris en compte...
J'ai plusieurs filtres pour plusieurs traitement selon mes besoins ; la majorité se mettent en place au fur et à mesure du traitement.

En vrac et tout en automatique :
:arrow: Ajout de liens (
:arrow: Pris en compte des abréviations (abréviations courantes, formules chimiques, symbole monétaire, chimique, etc.)
:arrow: Prise en compte des acronymes
:arrow: Prise en compte des mots à mettre en gras

Après un mediumCode ^^ pour :
:arrow: Mise en place des illustrations avec leur légende avec une taille adapté au contexte
:arrow: Mise en forme des tableau
:arrow: Pris en compte de la langue
:arrow: Mise en italique
:arrow: Mise en forme des titres
:arrow: Mise en place des liste
:arrow: Et encore bien d'autres choses...

Je t'envoi un MP pour un exemple concret de ce qui est en BDD et ce qui est à l'écran;)
 
Nouveau WRInaute
MERCI !!!

Un grand merci pour vos réponses rapides et de qualité.
Je vais donc me mettre au boulot.

Pour répondre à Static6000, le but est de mettre en avant certains mots dans mes articles pour permettre aux visiteurs de suivre les liens pour en savoir plus...

Encore merci.
 
WRInaute accro
Question con, c'est pas plus simple/mieux de le faire manuellement ? Quand on écrit l'article ? A la manière de Wikipedia : on crée le lien, quitte à ce que ça soit une erreur 404 (bon après faut que le site soit conçu pour "supporter" ça au départ).

Ça me semble plus efficace au final et surtout moins consommateur de ressources.
 
WRInaute passionné
wullon a dit:
Question con, c'est pas plus simple/mieux de le faire manuellement ? Quand on écrit l'article ? A la manière de Wikipedia : on crée le lien, quitte à ce que ça soit une erreur 404 (bon après faut que le site soit conçu pour "supporter" ça au départ).

Ça me semble plus efficace au final et surtout moins consommateur de ressources.

oui et non...

tu prend le risque effectivement de généré des erreurs 404 en pagaille, mais surtout tu pers un temps énorme à tout mettre en place...
Imagine un site conçu avec ce principe pour des milliers d'articles ; en un mot, ingérable pour une personne seule ! J'avais commencé ainsi au début, et j'ai vite compris que cela n'était pas l'idéal.

Aprèsil y à effectivement le problème des ressources ; on contourne le problème par une bonne mise en cache avec des délai de validité plus ou moins court en fonction des pages.
 
WRInaute accro
wullon a dit:
Question con, c'est pas plus simple/mieux de le faire manuellement ? Quand on écrit l'article ? A la manière de Wikipedia : on crée le lien, quitte à ce que ça soit une erreur 404 (bon après faut que le site soit conçu pour "supporter" ça au départ).

Ça me semble plus efficace au final et surtout moins consommateur de ressources.

C'est plus ou moins ce que j'ai fait, et ce n'est même pas générateur d'erreur 404, il suffit d'une petite fonction php qui teste si le mot est dans le dictionnaire de liens ou pas, et qui renvoie soit simplement le mot, soit le mot + le lien.

L'avantage par rapport à la solution de medium69, c'est que ça permet de ne mettre qu'un ou deux liens dans la même page même si le mot est présent 5 ou 10 fois.
Après il suffit de faire la maintenance de la base derrière.

Mais ce n'est pas rétro-actif, c'est le seul problème.

En même temps, sur un site donné, on peut avoir une idée des mots sur lesquels on veut faire un lien...
 
WRInaute passionné
Marie-Aude a dit:
L'avantage par rapport à la solution de medium69, c'est que ça permet de ne mettre qu'un ou deux liens dans la même page même si le mot est présent 5 ou 10 fois.

Le code que je propose permet de ne mettre le liens qu'une seule fois par page. le "1" en fin de code

Code:
$value = preg_replace('#(^|[\s\b\'(>])('.$keywords.')([\s\b.\],)<]|$)#U', '<a href="http://www.site.com/$1.html</a>', $value, 1);
 
WRInaute accro
medium69 a dit:
Marie-Aude a dit:
L'avantage par rapport à la solution de medium69, c'est que ça permet de ne mettre qu'un ou deux liens dans la même page même si le mot est présent 5 ou 10 fois.

Le code que je propose permet de ne mettre le liens qu'une seule fois par page. le "1" en fin de code

Code:
$value = preg_replace('#(^|[\s\b\'(>])('.$keywords.')([\s\b.\],)<]|$)#U', '<a href="http://www.site.com/$1.html</a>', $value, 1);

Oui j'ai vu, mais si j'ai bien compris c'est du "tout ou rien" et pour tous les liens.
Disons que parfois je "peaufine" un peu, ça dépend des pages et de la longueur du texte... et surtout, ce qui est important, et que je n'ai pas vu dans ton code, je choisis quelle occurrence du mot aura le lien.
 
WRInaute passionné
Marie-Aude a dit:
medium69 a dit:
Marie-Aude a dit:
L'avantage par rapport à la solution de medium69, c'est que ça permet de ne mettre qu'un ou deux liens dans la même page même si le mot est présent 5 ou 10 fois.

Le code que je propose permet de ne mettre le liens qu'une seule fois par page. le "1" en fin de code

Code:
$value = preg_replace('#(^|[\s\b\'(>])('.$keywords.')([\s\b.\],)<]|$)#U', '<a href="http://www.site.com/$1.html</a>', $value, 1);

Oui j'ai vu, mais si j'ai bien compris c'est du "tout ou rien" et pour tous les liens.
Disons que parfois je "peaufine" un peu, ça dépend des pages et de la longueur du texte... et surtout, ce qui est important, et que je n'ai pas vu dans ton code, je choisis quelle occurrence du mot aura le lien.

J'ai prévu ce contexte dans mon code ; à savoir que je n'ai pas donner toutes les options que l'ensemble du script permet.

Je peux très bien ignorer un mot, une phrase, voire un paragraphe complet, etc.

Mettre le lien sur telle occurence et pas une autre...
 
WRInaute accro
medium69 a dit:
J'ai prévu ce contexte dans mon code ; à savoir que je n'ai pas donner toutes les options que l'ensemble du script permet.

Je peux très bien ignorer un mot, une phrase, voire un paragraphe complet, etc.

Mettre le lien sur telle occurence et pas une autre...

Je m'en doute.

En fait tu as énormément bossé pour faire le code.
Moi j'ai fait un code BEAUCOUP plus léger, avec simplement la nécessité de mettre un flag pour chaque mot à lier, et donc si un jour je veux rajouter un mot imprévu, il faut que je fasse un rechercher - remplacer sur la source.
 
WRInaute accro
medium69 a dit:
Code:
$mots_defin = '';
$total_mots_texte = count($mots_texte);
	
for ($nb = 0; $nb < $total_mots_texte; $nb ++) {
  if (mb_strlen($mots_texte[$nb]) >= 2 && preg_match('#[a-zA-Z]#U', $mots_texte[$nb]) && !preg_match('#[0-9]#U', $mots_texte[$nb]) ) {
    $mots_defin .= $mots_texte[$nb].', '; // Préparation de la chaine de requête	
  }
}

je ne donne pas le prix de l'élégance a médium pour ces quelques lignes que je verrais plutôt sous cette forme :

Code:
$mots_defin = '';
foreach ($mots_texte as $mot) {
  if (mb_strlen($mot) >= 2 && preg_match('#[a-zA-Z]#U', $mot) && !preg_match('#[0-9]#U', $mot) ) {
    $mots_defin .= $mot.', '; 	
  }
}

l'élégance le petit plaisir caché du codeur ...
Humour mis a part merci pour ce fil qui tombe a poins sur un sujet que je traite ce jour en partie grace a vous ;-)
 
Nouveau WRInaute
Comment adapter cela à un forum phpbb2?

En sachant que les messages sont dans une boucle, comment faire que le mot clé ne se change qu'une seul fois dans la page?

Merci
 
WRInaute accro
À la décharge de Medium69, le
Code:
for
est moins gourmand en ressources que le
Code:
foreach
(à confirmer en PHP mais c'est vrai en VB.Net, C#, etc...)

Moins élégant mais plus efficace :wink:

Quoique avec un simple système de cache HTML (genre CacheLite) on s'en moque un peu :wink:
 
WRInaute accro
J'ai une question relative à ce genre de traitements (si quelqu'un à une idée). Si dans ma liste de mots-clés j'ai quelque chose du genre :

toto tata titi tutu

toto tata

titi tutu

titi

Comment être sûr de n'effectuer que les bons remplacements (c'est à dire n'affecter le lien destiné à la chaîne tit qu'à la chaîne stricte titi, et pas aux chaînes composées (comme toto tata titi tutu) qui peuvent avoir un lien différent associé ?

Genre si je décide de remplacement avion à hélice par avion à hélice (spitfire) et avion par avion (boeing), comment être sûr que le remplacement de avion par boeing n'affectera pas les chaînes avion à hélice.

(je sais pas si je suis très clair).
 
WRInaute accro
cedric_g a dit:
À la décharge de Medium69, le
Code:
for
est moins gourmand en ressources que le
Code:
foreach
(à confirmer en PHP mais c'est vrai en VB.Net, C#, etc...)
Moins élégant mais plus efficace :wink:
Tu as tout a fait raison (voir lien trouvé ici il y a qques jours -http://m-fernandez.developpez.com/articles/php/bench/)

cedric_g a dit:
Quoique avec un simple système de cache HTML (genre CacheLite) on s'en moque un peu :wink:
ce genre d'optimisation de site s'entend bien sur avec du cache sinon c'est pas la fête au village quand tu as de la visite. Dans mon cas j'utilise un cache maison sous forme php (les blocs statiques pré-traités, son mis en cache sous forme html et le fichier de cache (extensions php) me permet des include de widgets dans les pages.)

UsagiYojimbo a dit:
Comment être sûr de n'effectuer que les bons remplacements (c'est à dire n'affecter le lien destiné à la chaîne tit qu'à la chaîne stricte titi, et pas aux chaînes composées (comme toto tata titi tutu) qui peuvent avoir un lien différent associé ?

Je me pose la même question depuis hier car je viens de mettre en prod un truc qui utilise ce module de mon CMS qui n'était pas encore fini avant hier.
Une solution (lourde en ressources donc a envisager au travers d'un cache) consiste a traiter les expressions par taille de la plus grande a la plus petite et en deux étapes.

contexte du texte :

'titi toto tutu titi'

1ere passe
- tu change titi toto en %%1%% (sachant que %%1%% correspond a titi toto)
- tu change titi en %%2%% (sachant que ...)

2éme passe
- tu met en place le lien <a href ...>titi toto</a> sur les %%1%%
- tu met en place le lien <a href ...>titi</a> sur les %%2%%

la traduction intermédiaire permet l'élimination des doublons dans le liens.

si j'ai bien compris tu voulais éviter :

<a href ...><a href ...>titi</a> toto</a> tutu <a href ...>titi</a>
 
WRInaute accro
Pas con du tout l'idée de "coder" en quelques sortes au fur et à mesure les chaînes dans le texte, afin d'éviter les multiples passes. Tu m'ôtes une sacré épine du pied là (déjà que j'ai passé des heures à résoudre des soucis de comparaison de chaînes du à des saletés de caractères Word qui parsèment le HTML --merci FCKEditor :-( ).

Pour le coup je pense tenir un truc pas trop mal.

1/ J'ai mis en place un CRON qui va chaque soir parser les différents contenus et les comparer à la liste des mots-clés du lexique, afin de remplir une table d'association entre les entrées du lexique et ma table de contenu.

2/ Sur le front, je récupère les mots associés spécifiquement à la page en cours d'affichage, et je fais les remplacements uniquement sur les mots ramenés par ma requête, le tout allié à un système de cache pour éviter toute surcharge.

Ce système doit prochainement être mis en place sur un site communautaire avec pas mal de passage, alors je verrais vite si le système tiens la charge ou non.
 
WRInaute accro
Marie-Aude a dit:
L'avantage par rapport à la solution de medium69, c'est que ça permet de ne mettre qu'un ou deux liens dans la même page même si le mot est présent 5 ou 10 fois.
Dans mon cas je ne gère pas (encore) le nombre de liens mis en place mais je me pose la question de savoir si ce nombre de liens identiques au seins d'une même page peut avoir un impact négatif et si oui lequel ?

Un autre avantage de cette technique, pas mentionnée il me semble, réside dans la possibilité d'échanger des liens ciblés avec d'autre site autre part qu'en footer et dans un contexte adapté.
 
WRInaute passionné
je relance ce topic fort intéressant :

tu as trouvé une solution pour ton problème de charge vampire ?

et ta solution de coder et de décoder a fonctionné ?
 
WRInaute accro
Ca semble tenir la charge sans souci avec le système mis en place, et au vu des nombreux tests que j'ai pu effectué ça marche plutôt bien (j'ai affiné mes regexp au fil des semaines, car j'avais oublié quelques cas épineux dans mes remplacements).

Après le souci c'est que le client, qui avait appuyé avec insistance le développement de cette fonctionnalité ne l'utilise pas plus que ça (une constante dans le monde du dev web), car la liste des mots du glossaire n'a pas franchement évoluée depuis la mise en place du système.

Concernant mes soucis de remplacements, je me suis donc basé sur l'idée de zeb, pour éviter de remplacer plusieurs fois la même chaîne, le tout suivi d'un traitement en regexp pour ne pas effectuer les remplacements dans certains cas (notamment dans le cas ou le mot en question est inclus dans un attribut html que je n'ai pas à modifier, comme src, href, alt, etc.).
 
WRInaute accro
Re:

UsagiYojimbo a dit:
Pas con du tout l'idée de "coder" en quelques sortes au fur et à mesure les chaînes dans le texte, afin d'éviter les multiples passes. Tu m'ôtes une sacré épine du pied là (déjà que j'ai passé des heures à résoudre des soucis de comparaison de chaînes du à des saletés de caractères Word qui parsèment le HTML --merci FCKEditor :-( )..
C'ets pour cela que je rappelais plus haut de traiter les chaine classées par longueur (les plus longues en premier ...)
 
WRInaute accro
Oui oui mais si tu regardes les dates des posts et ma dernière intervention, tu verras que c'est cette idée que j'ai fini par appliquer, et ça marche bien.
 
Discussions similaires
Haut