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 :

Epurer les balises HTML [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Epurer les balises HTML
    Bonjour à tous,

    Peut-être que ce sujet a déjà été évoqué, mais je n'ai rien trouvé.

    Voilà, je voudrais m'assurer au maximum que la saisie utilisateur ne contienne pas de code malveillant pour certains formulaires, je n'ai donc autorisé que certaines balises grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strip_tags($text, '<p><b><i><u><ul><li><em><span><br><br /><hr>')
    .

    Maintenant, même en faisant ceci, il n'est pas impossible que dans ma balise <p> par exemple, j'ai un onClick par exemple. C'est ce genre de chose que j'aimerais éviter et donc je voudrais que les balises que j'ai autorisé soient épurées de tous les attributs.

    Seulement j'ai beau chercher et essayer je n'arrive pas à trouver la bonne expression qui me permettrait de faire ça ... en plus je suis pas super à l'aise avec les expressions alors j'y arrive vraiment pas. J'ai essayé plein de choses et la dernière en date c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace('#<p(.)*>#','<p>',$text);
    (bon là j'ai mis pour la balise P car je voulais déjà m'assurer d'y arriver pour une balise avant d'aller plus loin).

    D'avance merci pour votre aide !!

  2. #2
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    Tu peux essayer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace('#<p[^>]*>#','<p>',$text);
    Qui signifie : tout ce qui commence par <p, puis qui est suivit de 0 ou plusieurs caractères différents du >, et qui se termine par >/
    Z.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merciiiiiiii beaucoup à toi !! avec l'explication en plus pour être sure d'avoir bien compris, c'est parfait, ça marche bien.

    Et quand on regarde la solution comme ça, ça a l'air tellement simple ... ça m'ait même pas venu à l'esprit d'interdire des caractères plutôt que de tout autoriser ...

    Par contre, pour continuer là dessus, j'aimerais savoir s'il est possible de simplifier les choses de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $allowed_tags = array('p','b','i','u','ul','li','em','span','br','hr');
     
    $mask ='/<$élément_du_tableau[^>]*>/i'; //élément_du_tableau est récupéré de $allowed_tags
    En fait, si j'ai un tableau des balises autorisées, est-ce possible de récupérer chaque élément du tableau pour construire le masque qui correspondrait bien et le remplacer par la balise correspondant également ?

    En fait c'est juste pour savoir si je dois faire directement "en dur" un masque pour chaque balise ... Je sais qu'on peut faire des tableaux de correspondances entre les masques et les chaînes de remplacement, mais moi je veux savoir si on peut rendre la saisie du masque "plus simple".

    Merci d'avance

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Salut,

    Ca peut se faire, comme ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $str = "<p class='foo'> <span id='bar'>hello world</span> </p>";
     
    $tags = array('p', 'span');
     
    $reg = sprintf("#<(%s)[^>]*>#i", implode('|', $tags));
     
    echo preg_replace($reg, '<$1>', $str);
    Mais vu que tu n'as déjà gardé que les balises qui te convenait, tu peux aussi faire plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $str = "<p class='foo'> <span id='bar'>hello world</span> </p>";
     
    $reg = '/<(\w+)[^>]+>/i';
     
    echo preg_replace($reg, '<$1>', $str);

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ok, merci je vais tester ça.

    Par contre j'ai regardé dans la doc pour m'assurer de bien comprendre, j'ai bien compris le \w qui est très logique car je fais déjà une épuration juste avant pour garder les balises souhaitées.

    Par contre j'ai rien trouvé sur le <$1>, ou ce que j'ai pu trouver je ne le comprend pas (en tout cas ça correspond pas à ce que tu fais). Pourrais-tu m'expliquer à quoi cela correspond ou me donner un lien vers la doc correspondante, ce serait super sympa, car juste recopier c'est bof quand même

    merci d'avance !

  6. #6
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Le $1 correspond tout simplement à ce qui est attrapé par la première parenthèse capturante.

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

Discussions similaires

  1. Mettre les balises HTML quand il faut
    Par v4np13 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 15/05/2006, 10h02
  2. [RegEx] Supprimer les balises HTML
    Par hisy dans le forum Langage
    Réponses: 4
    Dernier message: 19/03/2006, 17h10
  3. Script pour enlever les balises html
    Par Scratch48 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 02/11/2005, 17h16
  4. [XSL] conserver les balises html
    Par krappa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/07/2005, 15h14
  5. forcer xsl à interpréter les balises html
    Par canal68 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/07/2005, 15h02

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