Aller au contenu

Remplacer mots entiers dans une chaîne


Sujets conseillés

Posté (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é par sparh
Posté

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

Non?

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

Jacques.

Posté (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é par sparh
Posté

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

Posté

Bonsoir,

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

merci bien à tous les deux.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...