IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

colorier les mots clefs d'une recherche [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 96
    Points
    96
    Par défaut colorier les mots clefs d'une recherche
    bonjour

    Alors tout d'abord je ne sais pas trop où je doit mettre le sujet car je ne sais pas si cela se fait en javascript ou php?

    Pour recherche le titre d'un album je laisse à l'utilisateur le choix de saisir un titre en entier ou seulement un bout.
    je voudrais qu'a l'affichage de la liste des titres le mot entré en recherche soit surligner (comme sous acrobat reader quand on fait une recherche)

    merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    salut
    essaye ce petit script, il fonctionne tres bien


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <html> 
        <head> 
            <title> 
                Recherche et Surbrillance 
            </title> 
            <script type"text/javascript"> 
                /* 
                / ©2006 FBNKCMaster 
                / J'rigole ;-p c'est libre utilisez le comme vous voulez!! 
                */ 
                function trouverMots(chaine) 
                { 
                    // On vide le champs de saisi, sinon ça va nous créer des problemes 
                    document.getElementById('rechDsPg').value = ''; 
                    // On définit les variables qui constituent la balise de colorisation 
                    var ouvrirBalise = '<span style="background-color: '; 
                    var frmOvrBalise = ';">'; 
                    var fermerBalise = '</span>'; 
                    // la variable doc qui contient l'html du la partie body 
                    var doc = document.body.innerHTML; 
                    // j pour l'incrementation 
                    var j = 0; 
                    // un tableau de couleurs, j'ai choisi huits couleurs à vous de mettre autant que vous voulez 
                    var arrayClrs = new Array("#FFFF00", "#66FFFF", "#33FF33", "#3333FF", "#FF9900", "#FF33FF", "#CCFF00", "#FF0000"); 
                    // On découpe la chaine à chercher et on recupère un tableau de mots 
                    tablMots = chaine.split(' '); 
                    // On essaye d'effacer la colorisation existante suite à la recherche précédente 
                    rchSupp = new RegExp( '(' + ouvrirBalise + '[^><]*>)' , 'gi'); 
                    doc = doc.replace(rchSupp, ''); 
                    rchSupp = new RegExp( '(' + fermerBalise + ')' , 'gi'); 
                    doc = doc.replace(rchSupp, ''); 
                    // Ici on remplace chaque mot trouvé par lui même entouré de la balise de colorisation 
                    for (i = 0; i < tablMots.length; i++) 
                    { 
                        // Si j dépasse le nombre de couleurs que nous avons définit dans le tableau on remet tout à zéro 
                        if (j >= arrayClrs.length) {j = 0;} 
                        // Le mot cherché doit avoir plus de deux caractères et ne soit pas une chaine vide 
                        if (tablMots[i] != '' && tablMots[i].length > 2) 
                        { 
                            // Recgercge du mot par expression relationnelle et remplacement dans doc 
                            rch = new RegExp( '(' + tablMots[i] + ')' , 'gi'); 
                            ouvrBalise = ouvrirBalise + arrayClrs[j] + frmOvrBalise; 
                            doc = doc.replace(rch, ouvrBalise + '$1' + fermerBalise); 
                            j += 1;// Incrementation de j le nombre de mots cherchés qui répondent aux conditions (!= '' et > 2) 
                        } 
                    }     
                    // On réecrit la partie body 
                    document.body.innerHTML = doc; 
                } 
            </script> 
        </head> 
        <body> 
            <p> 
                Rechercher : 
                <input id="rechDsPg" type="text" value="" name="rechDsPg" /> 
                <input type="button" onclick="trouverMots(document.getElementById('rechDsPg').value);" value="OK"> 
            </p> 
            <p> 
                Voici un texte pour voici montrer et illustrer VOICI la fonctionnalité du script de recherche colorisée au sein de la page, une colorisation comme "surbrillance" de google mais ici c'est à impléménter dans vos pages 
            </p> 
        </body> 
    </html>

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    salut,
    tu peux utiliser preg_replace pour place un <font> ou autre devant la chaine rechercher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo preg_replace ("/($chaine)/", "<font color='red'>${1}</font>", $resultat);

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Le preg replace n'as pas d'interet si ta recherche est "case sensitive".
    il faut alors utiliser str_replace().

    Dans le cas contraire, il existe une option qui rend le preg_replace insensible à la case :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace ("#[\s^]($chaine)[\s.]#is", "<font color='red'>\\1</font>", $resultat);
    a peu de choses pres (car je dit ca de tete, et je met mes parametres de tetes aussi, et dieu sait qu'ils sont nombreux pour les preg), cette version doit etre insensible a la case et ne prendre que les mots entier et isolé (genre pas détecter (w<b>est</b> si tu cherche <b>est</b>).
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 96
    Points
    96
    Par défaut
    Bonjour

    C'est exactementça que je cherchais.
    je vais privilégier la version php qui est compatible tout navigateur mais surtout plus simple a mettre en place.

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/02/2011, 11h10
  2. Récupérer les mots-clefs d'une page
    Par DJuL- dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2009, 17h07
  3. Recherche par mot clef dans une feuille excel.
    Par takamo dans le forum Excel
    Réponses: 12
    Dernier message: 18/06/2008, 14h35
  4. statistiques sur les mots clef
    Par Acropole dans le forum Statistiques
    Réponses: 7
    Dernier message: 22/12/2007, 20h33
  5. [Collections]Compter les mots différents d'une ArrayList
    Par alanpix dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/11/2005, 22h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo