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 :

Enlever des éléments appartenant à une chaine [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut Enlever des éléments appartenant à une chaine
    Bonsoir,

    Mon problème est le suivant:
    J'ai une chaine de caractère qui contient des éléments que je voudrais supprimer.

    Je met dans un tableau les balises que je souhaite enlever dans une chaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabTagToStrip=array('<img','<embed');
    J'ai par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $content='<div align="justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit<br><br>
    <p align="center"><img width="354" height="183" src="upload/wysiwyg/image/particuliers_grd.jpg" alt=""/></p><br><br></div>';
    Dans le résultat j'aurai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $content='<div align="justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit<br><br>
    <p align="center"></p><br><br></div>';
    Comme vous pouvez le constater la balise img (ainsi que tous son contenu) a été supprimé du contenu de la variable puisque je l'ai déclaré dans le tableau $tabTagToStrip comme élément à bannir si vous voulez..

    Est ce que vous avez une idée comment pourrai-je réaliser ceci??

    Merci

  2. #2
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Bonsoir,

    J'aurais bien pensé à utiliser la fonction strip_tags qui permet via son paramètre optionel de spécifier une liste de tags à conserver.

    Comme je ne sais pas trop dans quelle logique tu te trouves, je t'indique déjà cette solution qui est rapide à mettre en place.

    Ensuite, si tu ne veux supprimer que quelques balises ( ton exemple) alors il faudra utiliser des expressions régulières.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut
    Merci pour ta réponse FCYPBA
    Voilà ce que j'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $string = '<h1>Salut</h1><p>tout le monde</p>';
    $pattern = '@<p[^>]*?>.*?</p>@si';
    echo preg_replace($pattern, '', $string)
    ?>
    ça marche parfaitement, mais ce que je veux maintenant c'est de faire le teste sur un tableau et non pas un seul élément. Quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $string = '<h1>Salut</h1><p>tout le monde</p>';
    $tabTagToStrip = array("img","p");  //tableau
    $pattern = '@<p[^>]*?>.*?</p>@si';  //Au lieu de p j'aurais les éléments de mon tableau
    echo preg_replace($pattern, '', $string)
    ?>
    j'ai fais une boucle for mais ça n'a pas marché du faite que ça boucle infiniment
    Avez-vous une idée comment je pourrai régler ceci?

    Merci

  4. #4
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Dans ce cas tu dois pouvoir utiliser les conditions regex

    Il me semble que ca marche comme ca mais à verifier dans une doc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $pattern = '@<[p|strong|b][^>]*?>.*?</[p|strong|b]>@si';

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Par défaut
    Je crois que je n'ai pas été assez clair, ce que je veux, c'est pouvoir faire le test pour les éléments d'un tableau..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabTagToStrip = array("img","p");  //tableau
    c'est à dir pour faire le regex, il faut boucler sur les éléments du tableau qui contiendrai les balise à ne pas afficher.

    y'il un moyen??

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    qqch comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $content='<div align="justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit<br><br>
    <p align="center"><img width="354" height="183" src="upload/wysiwyg/image/particuliers_grd.jpg" alt=""/></p><br><br></div>';
    $tabTagToStrip = array("img","p");
     
    $bal = join('|', $tabTagToStrip) ;
    // avec ta regex :
    $content = preg_replace('@<p[^>]*>.*?</p>@si',  '', $content) ;
    // variante :
    $content = preg_replace('@</?($bal)[^>]*>@si', '', $content) ;
    Ta regex élimine le <p>, le </p>, et tout ce qu'il y a entre les deux. Ma variante est moins radicale, et se contente d'enlever les balises ouvrantes fermantes mais pas le texte entre elles.

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

Discussions similaires

  1. Enlever des mots d'une chaine de caractères
    Par daniel1985 dans le forum Général Java
    Réponses: 1
    Dernier message: 20/03/2013, 16h49
  2. [RegEx] extraire des éléments d'une chaine définie en regex
    Par omman95 dans le forum Langage
    Réponses: 1
    Dernier message: 29/12/2009, 15h32
  3. [Tableaux] Enlever x éléments d'une chaine
    Par jeepibmx dans le forum Langage
    Réponses: 7
    Dernier message: 22/09/2008, 17h05
  4. [SQLSERVER 2K]Enlevé des espaces dans une chaine
    Par MeHo_ dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2008, 15h51
  5. Réponses: 10
    Dernier message: 20/02/2008, 11h57

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