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

Voir le contenu

Page 1 sur 1
  • Vous ne pouvez pas créer de sujet
  • Vous ne pouvez pas répondre au sujet

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

#1 Utilisateur non-connecté   sparh 

  • Groupe : Hubmaster
  • Messages : 337
  • Inscrit : 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

Jeux en ligne sur Sparh Prods.
Mario sur Jeux flash online et le petit dernier: la vidéo du jour sur Drôle2video.com
0

#2 Utilisateur non-connecté   captain_torche 

  • Danacol / Orangina rouge
  • Icône
  • Voir le blog
  • Groupe : Admin
  • Messages : 5 751
  • Inscrit : 08-février 06
  • Genre:Homme
  • Localisation:rue des Landes, Chatou

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
0

#3 Utilisateur non-connecté   jcaron 

  • Icône
  • Groupe : Membre+
  • Messages : 484
  • Inscrit : 15-janvier 08
  • Société:Oxado

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 Utilisateur non-connecté   sparh 

  • Groupe : Hubmaster
  • Messages : 337
  • Inscrit : 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

Jeux en ligne sur Sparh Prods.
Mario sur Jeux flash online et le petit dernier: la vidéo du jour sur Drôle2video.com
0

#5 Utilisateur non-connecté   captain_torche 

  • Danacol / Orangina rouge
  • Icône
  • Voir le blog
  • Groupe : Admin
  • Messages : 5 751
  • Inscrit : 08-février 06
  • Genre:Homme
  • Localisation:rue des Landes, Chatou

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);

0

#6 Utilisateur non-connecté   sparh 

  • Groupe : Hubmaster
  • Messages : 337
  • Inscrit : 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.
Jeux en ligne sur Sparh Prods.
Mario sur Jeux flash online et le petit dernier: la vidéo du jour sur Drôle2video.com
0

Page 1 sur 1
  • Vous ne pouvez pas créer de sujet
  • Vous ne pouvez pas répondre au sujet

1 utilisateur(s) dans ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)