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 :

preg_match sur une valeur $_POST [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Points : 29
    Points
    29
    Par défaut preg_match sur une valeur $_POST
    bonjour,

    J'ai un textarea qui contient du code html.
    L'enregistrement dans la bd ne pose aucun problème et j'ai bien du code html dans la bd que je peux afficher par la suite.

    Maintenant j'aimerai utiliser la fonction preg_match entre l'envoi des données et l'enregistrement dans la bd.
    Mais lorsque je lis ma valeur $POST['htmlcontent'] après l'avoir décodée la fonction preg_match ne trouve pas d'occurence alors que l'expression est juste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $htmlContent = htmlspecialchars($_POST['htmlContent']);
    echo preg_match('#<\/div>$#', $htmlContent);
    Affiche 0

    Le pire c'est que si je fais un echo de $htmlContent, ce la m'affiche:
    <div>hello</div>

    Et que si je copie colle ce texte et que je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo preg_match('#<\/div>$#', "<div>hello</div>");
    ca afiche 1!

    Problème d'encodage surement mais je suis largué je sais pas ou chercher.
    J'ai essayé avec toute les options de htmlspecialchars et aussi htmlentities c pareil...

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    C'est normal, tes < deviennent &lt; et tes > deviennent &gt; avec htmlspecialchars dont ne matchent pas quand tu utilises preg_match

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#<\/div>$#', $htmlContent);
    cherche les motifs ’</div>’ situé(s) à la fin de la chaîne sujet, ou de ligne en mode PCRE_MULTILINE (symbole m) ,
    à cause de la présence du signe $ .
    http://fr2.php.net/manual/fr/regexp.reference.meta.php


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#<\/div>$#', "<div>hello</div>");
    matche parce que "<div>hello</div>" se termine par ’</div>’

    Mais il n’y a pas le m dans ta RE, donc ta fonction cherche uniquement s’il y a ’</div>’ à la fin de $htmlContent.



    Il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#</div>$#m', $htmlContent);


    À mon sens, l’antislash devant le slash n’a aucune justification. Le slash n’est pas un métacaractère à ma connaissance.

  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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par eyquem Voir le message
    À mon sens, l’antislash devant le slash n’a aucune justification. Le slash n’est pas un métacaractère à ma connaissance.
    Nuançons : il ne l'est pas lorsque le délimiteur du motif est correctement choisi.

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Nuançons : il ne l'est pas lorsque le délimiteur du motif est correctement choisi.
    Ah oui, bien sûr.
    Et comme le slash est souvent chosi comme délimiteur, on est obligé d'avoir ce réflexe.
    En tant que Pythonien, je n’ai pas à m’embarasser de ce genre de particularisme qui n’apporte rien d’autre qu’une surcharge minime mais non nulle de la mémoire et une obligation de bien choisir ceci ou cela.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Mais il n’y a pas le m dans ta RE, donc ta fonction cherche uniquement s’il y a ’</div>’ à la fin de $htmlContent.
    La je fais des exemples mais en concrét ce serait le but de trouver la dernière balise </div>

    Bon comemnt savoir ce qui se trouve réelement dans la variable $htmlContent??

    C'est normal, tes < deviennent &lt; et tes > deviennent &gt; avec htmlspecialchars dont ne matchent pas quand tu utilises preg_match
    J'ai essayé ca mais ca semble rien changer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $htmlContent = htmlspecialchars($_POST['htmlContent']);
    echo preg_match('#&lt/div&gt$#', $htmlContent);
    affiche toutjours 0

    Ce serait juste comme expression?

  7. #7
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par bkadoum Voir le message
    Bon comemnt savoir ce qui se trouve réelement dans la variable $htmlContent??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($htmlContent);

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par s.n.a.f.u Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($htmlContent);

    ca affiche bien <div>hello</div>

  9. #9
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    la dernière balise </div>
    ce n’est pas la même chose que

    ’</div>’ à la fin de $htmlContent





    Pour trouver la denière balise il y a deux solutions:


    - mettre le texte inversé dans une variable $htmlContentInv et faire

    preg_match('#>vid/<#', $htmlContentInv);



    - ou
    preg_match('#</div>(?!.*</div>)#', $htmlContent);



    PS

    N’y a-t-il pas en PHP une fonction comme rfind() en Python ou lastIndexOf() en Java ?

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

Discussions similaires

  1. [Serial] Commencer sur une valeur précise
    Par e1lauren dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/07/2006, 14h34
  2. Récupération d'une valeur $_POST & Syntaxe
    Par Greggggggg dans le forum Langage
    Réponses: 6
    Dernier message: 29/07/2006, 10h20
  3. Trier sur une valeur de champs et non sur le nom du champs
    Par kamalkam dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/05/2006, 17h41
  4. [HTML] Crée une valeur $_POST par l'intermédiaire d'un lien
    Par Nadd dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 21/04/2006, 10h53
  5. [XSL]appliquer la fonction substring sur une valeur récupéré
    Par totoranky dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 22/02/2006, 17h21

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