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 :

preg_replace et expression régulière [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut preg_replace et expression régulière
    Bonjour,

    J'utilise l'autocomplete jquery ui. Je souhaite rendre possible la mise en évidence des caractères tapés (par du gras par ex), ceci dans la liste des items proposés. Par ex si je tape "ra", il me serait proposé :
    radin
    parade
    etc
    L'utilisation de preg_replace et d'une expression régulière semble convenir à la problématique :

    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
     
    if ($conn)
    	{
    		$fetch = mysql_query("SELECT * FROM (SELECT titre AS res, concat('t',id_livre)AS id
      FROM livre
     WHERE titre LIKE '%".mysql_real_escape_string($_GET['term'])."%'
     
     union ALL
    SELECT prenom_nom_cb AS res, concat('c',id_contributeur) AS id
      FROM contributeurs
     WHERE nom_prenom_cb LIKE '%".mysql_real_escape_string($_GET['term'])."%'OR prenom_nom_cb LIKE '%".mysql_real_escape_string($_GET['term'])."%') AS resultat ORDER BY res ASC LIMIT 0,10");
     
    //particularité du jquery autocomplete =>Le passage de la valeur cherchée se fait par la variable $_GET['term']	
     
    		while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
     
    $row['res']= preg_replace('.(' . preg_quote($_GET['term']) . ').i', '<span style="color:red">\1</span>', $row['res']);//mise en évidence lettres tapées dans liste proposition
     
    			$row_array['value'] = $row['res'];
     
    			array_push($return_arr,$row_array);
    		}
    	}
     
    	mysql_close($conn);
     
    	echo json_encode($return_arr);
    Or la combinaison du preg_replace et de l'expression régulière ne donne pas le résultat escompté. Si je tape dans l'input text les caractères "ra", le système m'affiche le choix suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pa<span style="color:red">ra</span>de
    au lieu de colorer en rouge les caractères "ra".
    Voyez-vous les raisons de ce dysfonctionnement ? Merci.

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    la regex semble fonctionner ? Est-ce que tu colles pas un span dans un select, ce qui n'est pas possible ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut
    Merci de ta réponse. Le système d'autocompletion affiche les propositions dans une liste li avec un lien. Si je tape "ra", je vois, grâce à firebug, le mot "parade" dans la liste des propositions, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <li class="ui-menu-item" role="menuitem">
    <a class="ui-corner-all" tabindex="-1">pa&lt;span style="color:red"&gt;ra&lt;/span&gt;de</a>
    </li>
    Je ne sais pas si cela permet d'y voir plus clair pour trouver une solution...

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Je me demande si c'est pas ton mix preg_quote(), json_encode().
    preg_quote() te transforme "<" en "\<" et donc en json ça devient de la chaîne de caractères.
    Tu devrais faire un var_dump() de $row['res'] dans le while histoire de situer le problème.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut
    Ta suggestion me paraît pertinente. Étant donné que je suis obligé de conserver le json_encode(), comment est-il possible d'arriver au résultat escompté ? Merci encore.
    EDIT : je n'avais pas lu ta dernière phrase relative au var_dump. Je teste et je poste un nouveau message.

    EDIT2 : si je tape "ra" (dans ma base j'ai le nom "frazetta"), le var_dump me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string(40) " F<span style="color:red">ra</span>zetta"
    Je suis preneur de toute aide complémentaire. Merci.

  6. #6
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Bon, j'édite encore mon message mais non finalement le span devrait être interprété dans la sortie du var_dump(), ce qui veut dire que les < et > sont déjà encodés ce qui doit poser le problème. Si tu affiches la source de la sortie du var_dump() tu as déjà les &lt; et &gt; je pense ?

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

Discussions similaires

  1. [RegEx] Expression régulière simple et preg_replace
    Par Tenmaxime dans le forum Langage
    Réponses: 2
    Dernier message: 07/06/2010, 15h10
  2. [RegEx] str_replace vs expression régulière et preg_replace.
    Par mr_asta dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2010, 15h27
  3. [RegEx] preg_replace et syntaxe des expressions régulières
    Par MmoulinexX dans le forum Langage
    Réponses: 4
    Dernier message: 04/06/2006, 23h57
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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