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 régulier
    Inscrit en
    Avril 2007
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Points : 94
    Points
    94
    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
    Il faut parfois servir pour mieux dériger..

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    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.
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Points : 94
    Points
    94
    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
    Il faut parfois servir pour mieux dériger..

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    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';
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 233
    Points : 94
    Points
    94
    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
    Il faut parfois servir pour mieux dériger..

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 283
    Points : 11 742
    Points
    11 742
    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.
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

+ 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