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 :

htmlentities trop puissant [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut htmlentities trop puissant
    Bonjour,

    Voila j'ai cherché un moment, mais il est possible que j'ai loupé le post/solution, aussi voici mon problème.
    J'ai une chaine qui risque de contenir du langage html au moment de l'affichage. j'utilise donc soit htmlentities, soit htmlspecialchars (selon le résultat souhaité). Cependant dans cette chaine je souhaiterai garder les balises [<a href......> ... </a>] qui pourrait être dans cette chaine.

    J'ai pensé passer par un regex.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $value = htmlentites($value);
    preg_match('(&lt;a)(*)(&gt;)/si','c est là que je ne sais pas quoi mettre',$values);
    $value = str_ireplace('&lt;/a&gt;','</a>',$value);
    Mais je ne suis pas assez fort dans ce domaine pour retoucher ma chaine.

    aussi :
    • Y a t il un moyen de brider les fonctions htmlentities et htmlspecialchars ?
    • qqun a t il un lien à me proposer ou un axe de recherche ?


    nota : je n'ai pas accès à la config de php.

    PS : Si il y a des solutions toutes prêtes je prends aussi

  2. #2
    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,

    Voici un "axe de recherche" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $myString = '<p>un paragraphe</p><p>un autre avec un <a href="foo.html">lien</a></p>';
    $myString = htmlentities($myString);
    print $myString;
     
    $pattern = '#&lt;(/?a.*?)&gt;#';
     
    print preg_replace($pattern, '<$1>', $myString);

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut
    Après avoir posté cette réponse je vais cliquer sur le bouton [RESOLU],

    juste peux tu m'expliquer, quand même, stp, le <$1> je vais essayer de décrypter le $pattern comme un grand.

    MERCIIiiiiiiiiiiii.

  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
    Bien pour le bouton ! Ah si tout le monde faisait pareil...

    Le $1 est tout simplement l'expression capturée par la première parenthèse capturante, et je les remets entre < et >.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut
    si j ai bien compris ton $pattern en fait :

    il sélectionne les
    • </a>
    • <a .... >

    en un seul pattern. c est cool en fait.

    j ai juste rajoute le ENT_NOQUOTES qui va bien et hop ca marche super

    Le $1 est tout simplement l'expression capturée par la première parenthèse capturante
    c est le fameux $1 du "faites attention entre $11 et ${1}1" que l on voit sur pas mal d'explication du preg_replace ?

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

Discussions similaires

  1. Choix d'une carte graphique pas trop puissante.
    Par Tony Truand dans le forum Périphériques
    Réponses: 4
    Dernier message: 06/08/2008, 12h01
  2. chaine trop longue pour envoyer en socket?
    Par jeje.r dans le forum C++Builder
    Réponses: 10
    Dernier message: 27/06/2003, 16h36
  3. Surface trop grande
    Par Black_Daimond dans le forum DirectX
    Réponses: 1
    Dernier message: 18/01/2003, 03h02
  4. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28

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