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 :

Filtrer certaines balises HTML [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut [Résolu] Filtrer certaines balises HTML
    Bonjour,

    Je tente de me dépatouiller avec 2 regex. Ayant passé la soirée dessus, je fais appel aux pros !

    Contexte : je récupère du fichier HTML, généré de X façons (wysiwyg, word, open office...). Bref je voudrai nettoyer un peu le tout et barrer la route aux petits malins

    la 1ère regex :

    je cherche à whitelister certaines balises. Celles qui ne sont pas dedans sont effacées ainsi que le contenu entre ces balises.

    La 2ème :
    même fonction que la première sauf que si le texte analysé est prefixé de balise CODE (comme ici) alors tout passe dans une sorte de htmllenties. De cette façon le code s'affiche mais n'est pas exécuté

    Le but : Au final tout cela me ressort un fichier HTML en un seul morceau et clean de tous les trucs méchants

    En fouillant un peu sur le net, j'ai trouvé cela ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $texte='<toto>Nuage de tags</toto>';
    $texte = preg_replace('#(<(/?(?!table|div|p|toto)\b[^"]*?)>)ies#', '<i>$1</i>', $texte);
    mais ca me retourne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <toto>Nuage de tags</toto>
    Bref comme si de rien n'était !
    (Je vous passe tous mes autres tests...)

    Le toto c'est de moi, mais ca ne marche absolument pas, alors que la personne affirme le contraire. Quoiqu'il en soit cela ne m'aiderai que pour mon premier point.

    J'ai également regardé les tutoriels regex et les cours et tutoriels PHP du site, mais je n'y arrive toujours pas...

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    il y a une fonction qui fait ça, elle gère même les balises à conserver : http://php.net/strip_tags
    GNAP !

  3. #3
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Hello,
    ce que tu veux faire ca doit ressembler à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $texte='<code><t>Nuage de tags</t></code><b>toto</b>';
     
    //$texte = preg_replace('#<code>(.*)</code>#Uis', htmlentities('$1'), $texte);
    $texte = preg_replace_callback('#<code>(.*)</code>#Uis', 'myPregReplace', $texte); 
    $texte=strip_tags($texte,'<table><div><code><p><b>');
     
    function myPregReplace($arrModif){
      return htmlentities($arrModif[1]);
    }
    print_r($texte);
    ici on autorise les balises <table>, <div>, <code>, <p> et <b> après avoir fait un htmlentities sur le contenu entre les balises <code>.
    J'ai pas tout testé mais ca à l'air de marcher.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    @nosferapti yes merci !! J'avais raté le allowable_tags de cette fonction ! Merci.

    @John Blobsmith Super c'est exactement ça! Je connaissais pas ce call_back ! , merci beaucoup

    pour info je viens de poster un projet : ici

  5. #5
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Citation Envoyé par Hartas Voir le message
    @John Blobsmith Super c'est exactement ça! Je connaissais pas ce call_back ! ,
    Moi non plus avant 22H30...

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

Discussions similaires

  1. regex pour échapper certaines balises html
    Par stc074 dans le forum Général Java
    Réponses: 3
    Dernier message: 01/03/2015, 23h10
  2. [RegEx] Remplacer toutes les balises HTML sauf un certain type
    Par nicolas2603 dans le forum Langage
    Réponses: 4
    Dernier message: 22/09/2011, 09h06
  3. [RegEx] Repérage de certaines balises html
    Par The Goion dans le forum Langage
    Réponses: 4
    Dernier message: 21/07/2009, 13h53
  4. [RegEx] supprimer certaines balises HTML
    Par shinji_rem dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2007, 17h20
  5. [XSLT] Filtrer certaines balises d'un fichier XML
    Par arthix dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 07/07/2006, 12h21

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