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 :

Problème PHP et les slashs


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut Problème PHP et les slashs
    Bonjour,
    j'ai un probleme qui m'a bloqué toute la journée :/

    je voudrai créer une fonction qui test si une chain de caractere contient le caractere '\' ou '/' et renvoie 1 si c'est le cas ou 0 dans le cas contraire.

    voici le code que j'ai fait mais j'arrive toujours pas.
    ----------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
             if(strchr($ma_chaine,'\\') || strchr($ma_chaine,'\/'))
            {
                return 1;
            }
                     return 0;
    ----------

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function contains_slashs($chaine) {
    	return ereg('[\\/]', $chaine);
    }
    ?


    Julp.

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut Problème PHP et les slashs
    Bonjour julp,
    Ta fonction marche presque dans tous les cas sauf si la chaine est par exemple : "\toto" ou "\nini" . et si je met "titi\" j'ai un message d'erreur : Parse error: parse error, unexpected T_STRING in e:\site_local\www\test\test_fonctions.php on line 8

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut
    Est-ce que ce serait pas par hasard que le \ devant le " échappe le ", et du coup ta chaîne de caractères n'est plus déclarée comme telle ?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut feinte
    J'ai essayé c'est vrai que ça plante avec \ ...
    Sinon tu peux feinter comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(! explode('\\',"\toto")){echo "contient pas";}else{echo"contient";}

  6. #6
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut Problème PHP et les slashs
    Bonjour,
    Ton code affiche toujours "contient" meme si la chaine ne contient pas le '\'
    essay le ...

  7. #7
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut
    Citation Envoyé par julp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function contains_slashs($chaine) {
    	return ereg('[\\/]', $chaine);
    }
    ?


    Julp.
    Bonjour julp,
    Comment faire en sorte que cette fonction reconnait bien les '\' ou un '/' si par exemple on a : "\toto" ou "\nini" et aussi "titi\" ?

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function contains_slashs($chaine) {
    	return ereg("[\\\n\t\r/]", $chaine);
    }
    ?

    Mais est-ce bien normal de vous retrouver avec \n, \r, \t ? Normallement, en PHP il n'y a que ces caractères échappés qui sont reconnus (vu dans les sources) et PHP traite les caractères échappés inexistants (exemple : \z) comme un backslash puis un caractère.


    Julp.

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Par défaut addslashes()
    Oui, si tu peux utilise la fonction addslashes() en amont qui permet d'éviter ce genre de problèmes.

  10. #10
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut
    Citation Envoyé par julp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function contains_slashs($chaine) {
    	return ereg("[\\\n\t\r/]", $chaine);
    }
    ?

    Mais est-ce bien normal de vous retrouver avec \n, \r, \t ? Normallement, en PHP il n'y a que ces caractères échappés qui sont reconnus (vu dans les sources) et PHP traite les caractères échappés inexistants (exemple : \z) comme un backslash puis un caractère.


    Julp.
    Oui ca marche, et le seul probleme qui reste c'est si la chaine et de la forme "lala\", alors ile me sort une erreur : Parse error: parse error, unexpected T_STRING in e:\site_local\www\test_fonctions.php on line 10
    Alors le caractere " est escapé par le '\' d'où il y a l'erreur ...

  11. #11
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Vous confondez plein de choses, les amis :/
    Délimiter une chaîne avec des guillemets force PHP à interpéter le contenu de la chaîne :
    http://pbnaigeon.developpez.com/tuto...phe-guillemet/

    La solution pour avoir une chaîne contenant un backslash est
    • soit d'utiliser les apostrophes :
    '\toto' ==> il ne s'agit pas du caractère "\t" (tabulation) mais bien de "\" suivi de "t"
    • soit d'échapper le backslash lui-même :
    'toto\\' ==> cela évite les parse error
    Les fonctions ereg... sont à proscrire : elles s'appuient sur la norme POSIX, qui est obsolète et qui ne sera plus incluse en standard dans PHP6, contrairement aux PCRE :
    http://g-rossolini.developpez.com/tu...ns-regulieres/
    Dans le cas qui nous occupe ici, les expressions régulières elles-mêmes sont à éviter : la fonction strpos() est suffisante et mieux adaptée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $string = '\toto';
     
    if(strpos($string, '\') !== FALSE)
    {
       echo 'Un antislash a été trouvé';
    }

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

Discussions similaires

  1. Problème de récupérer les pages php mysql
    Par glodybiss4 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 15/12/2011, 10h03
  2. Problème complétion sur les fonctions natives PHP
    Par syber dans le forum Eclipse PHP
    Réponses: 1
    Dernier message: 05/10/2009, 14h21
  3. [SQL] problème de variable tableau PHP contenant les données d'une jointure SQL
    Par Schpountz42 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/02/2007, 05h59
  4. problème PHP avec les sessions
    Par soufian2290 dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2007, 18h00
  5. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59

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