détection d'un mot dans une chaine qu. que soit sa forme (Chat chAt)

détection d'un mot dans une chaine qu. que soit sa forme (Chat chAt) - PHP - Programmation

Marsh Posté le 30-04-2010 à 07:45:24    

voila, je détecte un mot dans une chaine et je le mets en gras avec ajout d'un lien etc etc
 
http://88.163.71.238/index.php?input=pourquoi
marche  
=> j'ai fait une boucle pour remplacer le mot si il est trouvé comme saisi par l'utilisateur et une autre pour le cas où la première lettre est en majuscule
http://88.163.71.238/index.php?input=florianep
marche pas  
j'ai un florianeP, majuscule qui traine n'importe où dans la chaine
 
j'applique un truc dans ce style :
 

Code :
  1. $url[1] = str_replace($mot2_lettre_1_majus,'<b><u><i><a href="'.$url[0].'">'.$mot2_lettre_1_majus.'</a></i></u></b>',$url[1]
  2. etc etc


 
Mais voilà, le deuxième cas plante car j'ai une majuscule qui traine n'importe où dans le code...
 
existe-t-il une fonction qui pourrait remplacer le mot quelle que soit la casse ?
 
Merci !


Message édité par erwan83 le 30-04-2010 à 08:00:30

---------------
http://www.ypikay.com
Reply

Marsh Posté le 30-04-2010 à 07:45:24   

Reply

Marsh Posté le 30-04-2010 à 08:36:06    

pourquoi tu ne fais pas un strtolower sur toute ta chaine
http://php.net/manual/en/function.strtolower.php

Reply

Marsh Posté le 30-04-2010 à 09:36:09    

en cherchant 2 secondes dans l'aide de php, t'aurais trouvé ça : http://www.php.net/manual/en/function.str-ireplace.php
 
Sinon, accesssoirement, y'avait les expressions régulières qui faisaient ça très bien aussi. ;)

Message cité 1 fois
Message édité par rufo le 30-04-2010 à 09:36:47

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 30-04-2010 à 17:10:24    

antac a écrit :

pourquoi tu ne fais pas un strtolower sur toute ta chaine
http://php.net/manual/en/function.strtolower.php


parce que je veux conserver la chaine telle que je l'ai trouvée.


---------------
http://www.ypikay.com
Reply

Marsh Posté le 30-04-2010 à 17:17:06    

rufo a écrit :

en cherchant 2 secondes dans l'aide de php, t'aurais trouvé ça : http://www.php.net/manual/en/function.str-ireplace.php
 
Sinon, accesssoirement, y'avait les expressions régulières qui faisaient ça très bien aussi. ;)


 
Non je pense que vous ne voyez pas ce que je veux faire...
 
Si j'obtiens le mot "meSSager" dans ma chaine alors que je cherchais "messager" ça va matcher, ce que je voudrais faire, c'est remplacer "meSSAger" par "<b>meSSager</b>" par exemple (donc je garde le même mot avec ses majuscules posées n'importe où...
 
Effectivement cette fonction (str_ireplace) est pas mal, mais ce n'est pas encore ce que je cherche


---------------
http://www.ypikay.com
Reply

Marsh Posté le 04-05-2010 à 12:08:35    

Ben alors il te faut utiliser soit les expressions régulières, soit faire un tableau de toutes les chaînes à remplacer, une boucle sur ce tableau qui recherche dans le texte à l'aide de stripos (http://www.php.net/manual/en/function.stripos.php ) et de faire un str_replace de l'occurrence trouvée par cette occurrence encadrée des balises <b>
 
J'ai développé un truc similaire dans mon soft Astres (cf signature) : remplacer des mots de la description d'un ticket par des liens hypertextes (donc balise <a> ) vers d'autres sites web (wiki, GLPI...). En plus, j'ai implémenté une option : soit on remplace toutes les occurrences d'un mot par son lien, soit uniquement la première occurrence.
 
Donc, faut que tu regardes le fichier .php du répertoire /Astres/Plugins/PHPLinkToInfosSTOPlugin/ (ou /Astres/Plugins/PHPLinkToInfosPlugin/ mais lui recherche dans plusieurs BD donc code plus complexe).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed