Webmaster Hub: Remplacer mots entiers dans une chaîne - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Remplacer mots entiers dans une chaîne mots entier et en respectant la casse Noter : -----

#1 L'utilisateur est hors-ligne   sparh 

  • Groupe : Hubmaster
  • Messages : 366
  • Inscrit(e) : 14-juin 07
  • Genre:Homme
  • Localisation:Levallois

Posté 08 février 2010 - 19:20

Bonsoir,

j'essaie de faire une fonction php qui ajoute un lien sur un mot dans une chaîne, jusqu'ici ça va.
Il faut respecter la casse et ne remplacer QUE les mots entiers

Voilà ma fonction
function add_lien_dans_description($chaine,$mot_interdit)
{
if($mot_interdit = '0')
{
$sql='SELECT keyword,url_k FROM keywords WHERE ORDER BY id ASC';
}
else
{
$sql='SELECT keyword,url_k FROM keywords WHERE keyword <> "'.$mot_interdit.'" ORDER BY id ASC';
}
 	$req=mysql_query($sql) or die('Erreur SQL ! <br>'.$sql.'<br>'.mysql_error());	

 	while($data = mysql_fetch_array($req)) 
	   {
        $in[] =  ' '.$data['keyword'].''; ;
	$out[] =  ' <a href="'.$url_site.'/'.stripslashes($data['url_k']).'.html"
 >'.stripslashes($data['keyword']).'</a> ';		
       }
		   
	   mysql_free_result($req);

//  str_ireplace ne prends pas en compte la casse
	$chaine = str_ireplace($in, $out, $chaine);
	
	return $chaine ;

}



Donc j'ai mis un espace devant le mot à remplacer mais ça ne suffit pas, et si je met un espace après le mot à rechercher, tout les mots suivi d'une virgule ou d'un point ne seront pas pris en compte.

Exemple:
$chaine = 'Webmaster hub le forum des webmasters';
$mot_rechercher = 'web';
$rendu = '<a href="le_lien">Web</a>master Hub le forum des <a href="le_lien">web</a>masters'

Alors que dans ce cas la il ne devrait pas y avoir de remplacement.
Je cherche depuis quelque temps sans trouver, alors si jamais vous pourriez m'aider ce serai génial.

Merci d'avance

Ce message a été modifié par sparh - 08 février 2010 - 19:28.

Gagner en jouant à des jeux gratuits sur WePlay Flash.
0

#2 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 08 février 2010 - 23:25

Il faudra sans doute que tu utilises une expression régulière pour le remplacement.
Je ne saurais que te conseiller la lecture de ce tutoriel : http://www.lumadis.b...x/tuto_pcre.php
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#3 L'utilisateur est hors-ligne   jcaron 

  • Groupe : Membre+
  • Messages : 844
  • Inscrit(e) : 15-janvier 08
  • Genre:Homme
  • Localisation:Londres

Posté 09 février 2010 - 02:03

preg_replace('/\b(mot)\b/','<a href machinchose>$1</a>',$chaine);


Non?

\b "matche" à la limite d'un mot.

Jacques.
0

#4 L'utilisateur est hors-ligne   sparh 

  • Groupe : Hubmaster
  • Messages : 366
  • Inscrit(e) : 14-juin 07
  • Genre:Homme
  • Localisation:Levallois

Posté 09 février 2010 - 09:23

Bonjour et merci
captain, le tuto et bookmarké, merci.

jcaron, avec \b j'arrive bien à modifier que les mots entier.
Mais le problème de preg_replace c'est qu'il fait attention à la casse.

Est il possible d'éviter ce problème ?

De plus je lis dans le manuel php qu'on peu utiliser la variable limit dans preg_replace pour limiter le nombre de remplacement à effectuer mais je n'arrive pas à l'utiliser (je suis bien en php 5), une idée ?

Ce message a été modifié par sparh - 09 février 2010 - 09:23.

Gagner en jouant à des jeux gratuits sur WePlay Flash.
0

#5 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Groupe : Admin
  • Messages : 6 658
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 09 février 2010 - 10:16

Pour que la modification soit insensible à la casse, il faut simplement ajouter le paramètre i après le délimiteur de fin de ton expression régulière.
Et pour limiter le nombre de remplacements, la doc indique tout simplement qu'il faut renseigner le paramètre facultatif limit.
Cela donnera quelque chose du genre :

preg_replace('/\b(mot)\b/i','<a href machinchose>$1</a>',$chaine, 1);

Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#6 L'utilisateur est hors-ligne   sparh 

  • Groupe : Hubmaster
  • Messages : 366
  • Inscrit(e) : 14-juin 07
  • Genre:Homme
  • Localisation:Levallois

Posté 09 février 2010 - 17:59

Bonsoir,
je comprends pas ce que je faisait mal mais génial, ça marche.

merci bien à tous les deux.
Gagner en jouant à des jeux gratuits sur WePlay Flash.
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)