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 :

Protection par anti-slash [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 24
    Points
    24
    Par défaut Protection par anti-slash
    hello à tous, le gros de mon problème de ce matin étant résolu, il me reste une question...

    Comment tester en PCRE "est un guillemet précéder d'un anti-slash ou n'est pas un guillement" ?

    L'expression: " ((?:(?<=\\)")|[^"])* " ne marche pas :(

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Houaa ! c'est de l'art une question comme ça !
    Bon, si j'ai bien compris, tu veux détecter un \" dans ta chain ?

    Si c'est le cas, utilise : \\\"

    Si tu veux détecter un guillement qui n'est PAS précédé d'un antislash, je verais bien un truc comme ça : ?\"
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par gloubi
    Houaa ! c'est de l'art une question comme ça !
    Bon, si j'ai bien compris, tu veux détecter un \" dans ta chain ?

    Si c'est le cas, utilise : \\\"

    Si tu veux détecter un guillement qui n'est PAS précédé d'un antislash, je verais bien un truc comme ça : ?\"
    Pas tout à fait... j'aimerais capturer une chaîne délimitée par des guillemet... j'utilise pour ça: "([^"])*"

    mais si j'ai une chaîne:
    "voilà une chaîne... elle contient une \"citation\", mais cette citation ne dois pas arreter l'analyse!"

    ben on va me sortire voilà une chaîne... elle contient une \

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Problème interressant... 9a peut pas marcher avec un truc de ce style :

    \"[.\\\".]*?\"

    (si j'ai bonne mémoire, le point remplace n'importe quel caractere, ce dont apres reflexion je ne suis pas sur pour le ?)

    Le principe étant de dire qu'on peut trouver autant de \" que l'on veut dans la chaine avant de trouver un " non précédé d'un \
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par gloubi
    Problème interressant... 9a peut pas marcher avec un truc de ce style :

    \"[.\\\".]*?\"

    (si j'ai bonne mémoire, le point remplace n'importe quel caractere, ce dont apres reflexion je ne suis pas sur pour le ?)

    Le principe étant de dire qu'on peut trouver autant de \" que l'on veut dans la chaine avant de trouver un " non précédé d'un \
    Ya quand même un bug, si la chaîne est: "\"citation\"", ben ça ne marchera pas

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    c'est juste ! Si j'avais le droit de faire le porc à ta place, je ferais dabord un str_replace() de \" par §, puis la meme chose dans l'autre sens apres mon traitement lol
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par gloubi
    c'est juste ! Si j'avais le droit de faire le porc à ta place, je ferais dabord un str_replace() de \" par §, puis la meme chose dans l'autre sens apres mon traitement lol
    Et si la chaine contient un § ??

    J'aimerais pas pouvoir garder tout les caractères

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Le § était juste là pour illustrer "l'esprit gros cochon"

    Rien ne t'empèche de trouver une combinaison plus compliqué qui sera jamais utilisé, genre -=§¤=- ou un truc vraiment crados comme ça !

    Y'a la méthode BBCode aussi, où les gars génèrent un UID : en réalité, a chaque texte est associé un UID généré aléatoirement via substr(md5(microtime()),0,10), et ils stockent ça en BDD comme ça :

    [B:69762359de]texte en gras[/b:69762359de]

    Appliqué à ton principe (en sauvegardant l'UID dans une variable le temps de faire ton traitement), ça réduirait à peu près à néant les chances d'erreur :

    §69762359de§ pour un \" avec un str_replace()...

    Enfin bon, c'est la méthode dite "du gros porc" (dont j'ai déjà assez abusé aujourd'hui)... Perso, je voit pas de soluce a ton probleme en preg...

    En dehors des PREG, y'a les grammaires, les automates et les trucs comme ça...
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 23
    Points : 24
    Points
    24
    Par défaut
    Personne ne sais utiliser les assertions ?

    J'ai pourtant l'impression que c'est ce qu'îl me faut

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

Discussions similaires

  1. Des anti-slashes dans ma newsletter
    Par dolphi dans le forum Langage
    Réponses: 3
    Dernier message: 09/02/2006, 19h54
  2. Protection par blocage de répertoire?
    Par Madmac dans le forum Windows XP
    Réponses: 15
    Dernier message: 09/02/2006, 00h41
  3. anti-slash té
    Par ryan dans le forum Langage
    Réponses: 4
    Dernier message: 22/01/2006, 17h13
  4. Réponses: 10
    Dernier message: 24/10/2005, 16h37
  5. SELECT qui ne retourne rien à cause d'anti-slash
    Par mikyfpc dans le forum Outils
    Réponses: 8
    Dernier message: 07/08/2005, 23h04

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