triple antislash

Manipulation d'addslashes()
Invité n'ayant pas de compte PHPfrance

27 févr. 2011, 19:16

Bonjour,

Qqu'un pourrait-il m'expliquer pq lorsque j'écris ceci comme code:


$t = "\' ";
echo addslashes($t);


S'affiche à l'écran un striple slash avant l'apostrophe ?:

\\\'

Y en aurait-il un pour l'antislash et un pour l'antislash lié à l'apostrophe?

Merci.
Clasie

ViPHP
xTG
ViPHP | 7331 Messages

27 févr. 2011, 19:45

Un pour l'antislash et un pour l'apostrophe. :)
Cette fonction est incapable de savoir si les caractères sont déjà échappés ou non.

ViPHP
AB
ViPHP | 5818 Messages

27 févr. 2011, 19:47

Je dirais qu'il faut deux antislash pour protéger un antislash

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 févr. 2011, 20:24

Un slashe qui echappe le slashe qui echappe ?

Je pencherais pour la solution de xTG par contre la doc est pas tres claire a ce sujet :/ fr2.php.net/addslashes

@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

27 févr. 2011, 20:51

Je dirais qu'il faut deux antislash pour protéger un antislash
Et qu'est ce qui échappe l'antislash qui échappe l'antislash qui échappe l'antislash ?
Non parce que tant qu'à faire du récursif on peut aller loin comme ça. :P

Pour échapper un antislash il suffit d'un seul antislash. :)

Petit nouveau ! | 9 Messages

27 févr. 2011, 22:22

si je fais ceci:

$t = "\ ";
echo addslashes($t);

s'affiche: \\

... donc il semble bien qu'un antisl demande deux....mais pq?

Petit nouveau ! | 9 Messages

27 févr. 2011, 22:26

...bon si j'en mets 2 s'affichent 2 antsl. Mais si j'en mets 3 -> s'affichen 4 antsl!
->
$t = "\\ ";
echo addslashes($t); // affiche -> \\

$t = "\\\ ";
echo addslashes($t); // affiche -> \\\\

je ne comprends pas trop la règle...

Petit nouveau ! | 9 Messages

27 févr. 2011, 22:55

Je pense que xTg a raison. Il faut ajouter juste que deux antislashes dans le string de départ n'égalent pas une barre avec un caract d'échappement mais deux barres obliques inversées (g viens de lire ça dans un liv sur php). C'est ok donc....merci pour votre aide.

ViPHP
AB
ViPHP | 5818 Messages

27 févr. 2011, 23:23

Je dirais qu'il faut deux antislash pour protéger un antislash
Et qu'est ce qui échappe l'antislash qui échappe l'antislash qui échappe l'antislash ?
Non parce que tant qu'à faire du récursif on peut aller loin comme ça. :P

Pour échapper un antislash il suffit d'un seul antislash. :)
Nan ... mais le AB qu'à dit ça c'est pas moi, ça doit être un fantôme du dimanche après midi qu'a squatter ma chaise :lol:

ViPHP
xTG
ViPHP | 7331 Messages

28 févr. 2011, 07:26

Faut appeler Ghostbuster ! :o

ViPHP
ViPHP | 2577 Messages

28 févr. 2011, 14:52

Bonjour,

Dans la chaine "\'", \' n'est pas considéré comme un caractère spécial, donc \ pas comme un caractère d'échappement d'où le \\\'.

echo "\'" => \'
echo '\'' => '
echo "\\" => \
echo "\" => erreur PHP

C'est en regardant ce qu'il y a dans ta variable que tu pourras deviner ce va faire addslash.

De même, "\n" => retour chariot et '\n' => \n

Pour les affectations :
Dans une chaine avec quotes, seul \' est modifié en '
Dans une chaine avec double quotes, \n, \t, \\, \" sont interprétés avant de renseigner la variable (je ne connais pas la liste exhaustive des \x)