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 :

Recherche de mots et balises HTML [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut Recherche de mots et balises HTML
    Bonjour,

    j'essaye de créer une procédure permettant de remplacer certains mots dans un contenu HTML...
    voici mon motif actuel : #\b'.$val['mot'].'\b#iu

    Sauf que je viens de m'apercevoir que cela pose problème avec les valeurs des attributs des balises HTML (ex le title et src d'une balises IMG).

    Quel serait alors le motif pour récupérer les mots exceptés ceux qui sont à l'intérieur des balises HTML ?

    Merci d'avance

  2. #2
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Je tenterais bien de suggérer:

    #\b[^<.]?'.$val['mot'].'[^>.]?\b#iu

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    apparemment, c'est pas encore ça...

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $mot = 'images';
    $chaine = '<p style="text-align:center;"><img src="/images/truc.jpg" alt="" /></p><p>Les images sont belles.</p>';
    $motif = '#\b[^<.]?'.$mot.'[^>.]?\b#iu';
    $chaine = preg_replace($motif, 'XXXX', $chaine);
    echo htmlentities($chaine);
    ?>
    affiche :
    <p style="text-align:center;"><img src="/XXXXtruc.jpg" alt="" /></p><p>LesXXXXsont belles.</p>
    alors que j'aimerais avoir :
    <p style="text-align:center;"><img src="/images/truc.jpg" alt="" /></p><p>Les XXXX sont belles.</p>

  4. #4
    Membre actif Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Points : 296
    Points
    296
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $mot = 'images';
    $chaine = '<p style="text-align:center;"><img src="/images/truc.jpg" alt="" /></p><p>Les images sont belles.</p>';
    $motif = '#[^/]'.$mot.'#iu';
    $chaine = preg_replace($motif, 'XXXX', $chaine);
    echo htmlentities($chaine);
    ?>
    voila
    n'oublie pas résolu si c'est le cas

  5. #5
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    merci pour ta participation frol mais la chaine que j'ai fournit précédemment n'était qu'un exemple...
    évidemment, je ne cherche pas seulement à exclure un mot lorsque celui se trouve après <img src="/

    Alors voici un nouvel exemple, dans la chaine suivante, j'aimerais remplacer seulement le premier et le dernier "images" (en excluant le n°2 et 3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = '<span>images</span><p style="text-align:center;"><img src="/images/truc.jpg" alt="Des très jolies images" /></p><p>Les images sont belles.</p>';
    Apparemment, il serait possible dans mon cas, d'utiliser les masques conditionnels. J'essaye de mettre en pratique mais pour l'instant... aucun résultat.


  6. #6
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Tu peux peut-être y arriver avec les assertions avant négatives.
    Quelque chose comme '#\b'.$val['mot'].'\b(?![^<]*>)#iu'

  7. #7
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut

    trop de la balle !
    Merci beaucoup Eusebe, ça à l'air de marcher nickel (étonnant de "simplicité")


  8. #8
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    En fait, ça ne marchera pas si tu as le caractère ">" dans ton texte... Est-ce que ça peut se présenter ?

  9. #9
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    je dirais que non car normalement le texte provient de BDD alimentée par un éditeur FCKeditor, qui doit convertir les caractères "anormaux".

    Par contre, si l'on veut restreindre le "remplacement REGEX" au < IMG >, le motif serait comme ceci ? (impossibilité de tester actuellement...)

    #\b'.$mot.'\b(?![^<img ]* />)#iu

  10. #10
    Membre actif Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Points : 296
    Points
    296
    Par défaut
    heu moui ne pas oublier de gérer les majuscules minuscules...

  11. #11
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 906
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 828
    Points
    14 828
    Par défaut
    Le modificateur i sert à ça.

  12. #12
    Membre actif Avatar de frol
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 288
    Points : 296
    Points
    296
    Par défaut
    autant pour moi

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

Discussions similaires

  1. Séparer des mots de balises HTML
    Par kandro dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 28/12/2011, 16h40
  2. recherche fulltext et balises html
    Par sylvainS63 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/10/2007, 10h26
  3. module de recherche de mots dans une page html
    Par Drozo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/08/2006, 10h57
  4. Réponses: 12
    Dernier message: 03/12/2005, 00h07
  5. moteur de recherche exclusion balises HTML
    Par RobinNono dans le forum ASP
    Réponses: 1
    Dernier message: 03/10/2005, 23h51

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