REGLE: Surligner un mot dans une page

REGLE: Surligner un mot dans une page - PHP - Programmation

Marsh Posté le 22-01-2007 à 11:26:28    

Encore une fois désolé de vous embêter avec mes soucis (mais j'ai beau chercher  :??:)
 
J'aimerais surligner un mot dans page.
Bref je recherche un moyen de trouver un mot dans un page et d'y ajouter des balises autours.
 
Quelqu'un pourrait-il m'aiguiller sur le droit chemin ? (je ne demande pas non plus le code tout fait :p)
 
Merci beaucoup


Message édité par Elmoricq le 23-09-2009 à 22:34:56
Reply

Marsh Posté le 22-01-2007 à 11:26:28   

Reply

Marsh Posté le 22-01-2007 à 11:39:36    

lecture de ta page html, fonction de recherche d'une occurence + modification du source html avec ajout css background-color sur le mot en question, puis affichage.

Reply

Marsh Posté le 22-01-2007 à 11:44:24    

Hum.
Donc si je comprends bien,
Une fois la page généré j'appelle un autre script qui lui va relire la page et faire les modif pour afficher les résultat ?
Ou je peut faire cela dans la même page ?


Message édité par izbing2 le 22-01-2007 à 11:44:35
Reply

Marsh Posté le 22-01-2007 à 12:58:58    

T'as des pages qu'elle soient statiques ou générées dynamiquement, là tu appelles la page que tu veux sauf qu'au lieu de l'afficher, tu récupères son contenu (tampon, file_get_contents...) que tu parses pour trouver ce que tu cherches et tu rajoutes simplement des balises autour (preg_match_all) et t'envoies le tout au client :spamafote:
 
Donc ta page c'est ta page :spamafote: ton script doit appeler ta page et chercher les occurences dans son contenu  :)

Reply

Marsh Posté le 22-01-2007 à 14:54:06    

Merci beaucoup à vous 2.
Mais je pense faire comme ceci :
 
En fait les résultats surligné sont obligatoirement dans un array.
Je vais donc utiliser implode, ensuite regex pour rajouter les balises, et explode pour recréer le tableau avant de balancer les infos...
 
Vous en pensez quoi ?

Reply

Marsh Posté le 22-01-2007 à 15:08:46    

pas besoin de implode/explode, vu que preg_replace accepte les tableaux en arguments

Citation :

Si subject est un tableau, alors l'opération sera appliquée à chacun des éléments du tableau, et le tableau sera retourné.

Reply

Marsh Posté le 22-01-2007 à 15:48:15    

Merci beaucoup soju, je test tout ça et je REGLE le topic si c'est bon :)

Reply

Marsh Posté le 22-01-2007 à 15:57:50    

Citation :


while( $result = mysql_fetch_array($req))
{
 
$imp2 = preg_replace("# ".$recherche." #", "<span class=\"surligne\">".$recherche."</span>", $result);
echo $imp2[nom];


 
??? Qu'est ce que va pas ?!?

Reply

Marsh Posté le 22-01-2007 à 16:08:01    

y'a quoi dans $recherche?

Reply

Marsh Posté le 22-01-2007 à 16:49:39    

pas très propre, tu fais le replace seulement sur un mot entouré d'espace, si le mot est en début ou fin ça ne marche pas.
essaye avec ça :

Code :
  1. preg_replace('#(^|\s)('.$recherche.')(\s|$)#', '\1<span class="surligne">\2</span>\3', $result);

Reply

Marsh Posté le 22-01-2007 à 16:49:39   

Reply

Marsh Posté le 22-01-2007 à 17:22:17    

pkoi ne pas simplement utiliser replace() ? (ou str_replace() ou chais plus quoi, enfin... le replace de base quoi...)

Reply

Marsh Posté le 22-01-2007 à 17:39:33    

+1...
Les regexs caylemal...

Reply

Marsh Posté le 22-01-2007 à 17:43:43    

si la recherche porte sur des mots entiers, le str_replace n'est pas adapté...

Reply

Marsh Posté le 22-01-2007 à 17:44:54    

pour info, ta recherche, tu la fais avec quoi ? (parceque j'ai un sérieux doute sur le "mots entiers" )

Reply

Marsh Posté le 22-01-2007 à 17:58:14    

soju a écrit :

si la recherche porte sur des mots entiers, le str_replace n'est pas adapté...


et pourquoi donc???  [:roane]

Reply

Marsh Posté le 22-01-2007 à 19:13:57    

parceque s'il cherche "exactement" eau il ne veut pas avoir un troupeau de blaireaux qui déboulent.
mais je doute très fortement que son système de recherche fasse déjà la différence donc...

Reply

Marsh Posté le 22-01-2007 à 22:10:20    

Je la fais soit avec LIKE (avec critère) soit en FULLTEXT (et je compte restructurer tout ça en REGEXP)
 
Sinon j'ai trouver comment faire ^^ C'est pas très compliqué et pour ceux que ça interresse voici le code :
 

Citation :


$mot1 ="#".$recherche."#i";
$replace ="<span class=\"surligne\">".$recherche."</span>";
$result = preg_replace($mot1, $replace, $result);


 
Merci à vous tous

Reply

Marsh Posté le 23-01-2007 à 09:10:27    

MagicBuzz a écrit :

parceque s'il cherche "exactement" eau il ne veut pas avoir un troupeau de blaireaux qui déboulent.


izbing2 a écrit :

Citation :


$mot1 ="#".$recherche."#i";
$replace ="<span class=\"surligne\">".$recherche."</span>";
$result = preg_replace($mot1, $replace, $result);



 :whistle:  :whistle:  

Reply

Marsh Posté le 23-01-2007 à 09:18:21    

soju a écrit :

pas très propre, tu fais le replace seulement sur un mot entouré d'espace, si le mot est en début ou fin ça ne marche pas.
essaye avec ça :

Code :
  1. preg_replace('#(^|\s)('.$recherche.')(\s|$)#', '\1<span class="surligne">\2</span>\3', $result);



 
\b est fait pour ça.
 
preg_replace('#\b' . $recherche. '\b#i', '<span class="surligne">\0</span>', $result);


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 23-01-2007 à 10:31:06    


 
Quoi ???
 
Si j'ai une recherche multicritère (Mot entier, et mot non entier... Je peux très bien chercher eau et tombe sur blaireaux...

Reply

Marsh Posté le 23-01-2007 à 10:38:24    

ça dépend de ce qu'il y a dans $recherche mais admettons que tu aies

Code :
  1. $recherche='eau';


la phrase

Citation :

le beau blaireau boit de l'eau à fontainebleau


tu vas te retrouver avec

Citation :

le b<span class="surligne">eau</span> blair<span class="surligne">eau</span> boit de l'<span class="surligne">eau</span> à fontainebl<span class="surligne">eau</span>


soit exactement ce qu'aurait fait str_replace [:spamafote]


Message édité par anapajari le 23-01-2007 à 10:39:36
Reply

Marsh Posté le 23-01-2007 à 10:42:58    

(de façon plus simple et certainement plus rapide :D)

Reply

Marsh Posté le 23-01-2007 à 11:39:33    

Merci :)

Reply

Marsh Posté le 23-01-2007 à 17:58:10    

mot entier : preg_replace('#\beau\b#', '<span>eau</span>', $texte)
recherche standard : str_replace

Reply

Marsh Posté le 17-10-2007 à 09:38:52    

J'ai un petit souci avec cette méthode, si le mot recherché est dans une balise html genre <img src="champignon.jpeg" /> et que l'on cherche champignon, le surlignage se colle dans la balise html du coup plus d'image et un bout de code qui apparait.

Reply

Marsh Posté le 17-10-2007 à 09:41:01    

De plus le preg_replace() me mange un caractère de chaque coté du mot.
 

Code :
  1. $replacements='<span style="background-color:#ffe200;">$0</span>';
  2. $pattern='#(^|\b|[[:space:]])(\W'.$_SESSION['rechercher'].')($|\s|[[:punct:]])#i';
  3. $contenu_t=preg_replace($pattern, $replacements, $resultatFiche->contenu);


Message édité par drishou le 17-10-2007 à 09:43:16
Reply

Marsh Posté le 23-09-2009 à 21:14:41    

bonsoir, desolé de déteré le sujet mais il correspond a se que je voudrai faire avec mon moteur de recherche.
je souahiterai donc surligner dans mes resultat le ou les mos qui ont été rentrer dans la recherche. Le hic c'est que je voi pas comment l'adapté a mon code.  
si vous pouviez me donner un coup de main.
voici mon code : (je voudrai surligner les mots qui se trouveraient dans les champs $ref et $alt)
 

Code :
  1. function search()
  2.           {
  3. $champ=$_POST['rechercherpar'];
  4. $mot=$_POST['mot_cle'];
  5. echo '<img src="../images/fleche.png" alt="Les photos trouvées" class="imggauche" />
  6. Vous rechercher portait sur : <span class="surljaune"> '.$mot.' </span> <br/>Pour le type de galerie : <span class="surljaune"> '.$champ. ' </span><br/>Voici les photos trouvées en fonction de votre recherche.<div class="clear"></div>';
  7. if($champ == 'Toutes les galeries' )
  8. {
  9. $resultat=mysql_query("SELECT * FROM IWgalerie WHERE match(`ref`,`exemple`,`alt`) against ('$mot') ORDER BY type, ref, alt  ASC" );
  10. }
  11. elseif($champ != 'Toutes les galeries' ){
  12. $resultat=mysql_query("SELECT * FROM IWgalerie WHERE type='$champ' AND match(`ref`,`exemple`,`alt`) against ('$mot') ORDER BY type ASC" );
  13. }
  14.    while($ligne = mysql_fetch_array($resultat))
  15.           {
  16.    $ref=$ligne['ref'];
  17.    $alt=$ligne['alt'];
  18.    $type=$ligne['type'];
  19.  
  20. echo '<div class="search"><h4>'.$type.'</h4>
  21. <a href="../images/galerie/'.$ligne['photoref'].'" rel="lightbox[roadtrip]" title="'.$ligne['alt'].'" >
  22. <img src="../pages/mini-galerie.php?f='.$ligne['photoref'].'" alt="'.$ligne['alt'].'" border="0" width="185px" height="124px" />
  23. </a>
  24. <br/>
  25. <span class="bleucl">Nom : </span>'.$ref.' <br/>
  26. <span class="bleucl">Déscription : </span><br/>'.$alt.'</div>';
  27.           }
  28.           }
  29. search();
  30. ?>


Message édité par fabrice88250 le 23-09-2009 à 21:15:29
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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