sparh Posté 8 Février 2010 Posté 8 Février 2010 (modifié) 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 Modifié 8 Février 2010 par sparh
captain_torche Posté 8 Février 2010 Posté 8 Février 2010 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.be/regex/tuto_pcre.php
jcaron Posté 9 Février 2010 Posté 9 Février 2010 preg_replace('/\b(mot)\b/','<a href machinchose>$1</a>',$chaine); Non? \b "matche" à la limite d'un mot. Jacques.
sparh Posté 9 Février 2010 Auteur Posté 9 Février 2010 (modifié) 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 ? Modifié 9 Février 2010 par sparh
captain_torche Posté 9 Février 2010 Posté 9 Février 2010 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);
sparh Posté 9 Février 2010 Auteur Posté 9 Février 2010 Bonsoir, je comprends pas ce que je faisait mal mais génial, ça marche. merci bien à tous les deux.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant