Curiosité à propos de addcslashes() et de \n

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Curiosité à propos de addcslashes() et de \n

par Tchukai » 14 août 2008, 21:33

D'accord d'accord.
Je vois que mon incompréhension du problème allait plus loin que je ne le pensais.
J'avais assimilé le \n comme quelque chose qui n'avait nullement besoin d'être interprété. Je pensais que lorsque le "visionneur" de code Firefox (Ctrl+u) rencontrait un \n, c'était à lui de l'interpréter comme une indication de passage à la ligne. D'où ma surprise de voir ce \n dans le code source.
En fait, si on veut que la destination voit un passage à la ligne, \n doit être interprété par PHP en une "entité" qui indique ce passage à la ligne.
Question subsidiaire alors, tant qu'à foutre, quelle "entité" est-ce exactement ? Un test répond à la question :
// Ici les " sont obligatoires donc pour que php interprète la chose comme "l'entité" de passage à la ligne.
ord("\n") // 10
Donc "l'entité" en question est un simple caractère. Comme je suis paranoïaque, je vérifie :
echo 'Blabla '. chr(10) .' bla'; // Affiche bien le passage à la ligne dans le code source et non un \n.
Ça marche, et du coup addcslashes() me parait plus utile maintenant que j'ai compris deux-trois trucs.
$aLaLigne = 'Blabla '. chr(10) .' bla';
$aLaLigne = addcslashes($aLaLigne, "\n"); // Converti le caractère de passage à la ligne en sont équivalent à interpréter -> \n :).
// Ici il n'y a plus de passage à la ligne dans le code source, mais un beau \n !
echo $aLaLigne; // (Ctrl+u) affiche bien -> Blabla \n bla 

par Ryle » 13 août 2008, 13:35

Parce qu'entre apostrophes le retour à la ligne \n n'est pas interprété ?

C'est le même principe que pour les variables php dans une chaine : si tu utilises une variable entre guillemets, celle-ci est interprétée, pas entre apostrophes :
$var = "world";
echo "hello $var"; // affiche : hello world
echo 'hello $var'; // affiche : hello $var

Re: Curiosité à propos de addcslashes() et de \n

par Tchukai » 12 août 2008, 15:15

Bonjour
.............

Je me pose une question au sujet de la fonction addcslashes() et du caractère de retour à la ligne \n.
Pourquoi quand je code ceci :
echo 'blabla \n bla';
et que je regarde le code source à partir du navigateur, je constate que le \n fait son travail de passage à la ligne,
alors que quand je code ceci :
echo addcslashes('blabla n bla', 'n');
le passage à la ligne ne s'effectue pas (toujours dans le code source).
Il affiche la même chose que si je code ceci :
echo 'blabla \\n bla';


Edit : je me suis mélangé les pinceaux avec les guillemets doubles et simples, désolé.
La question peut peut-être se résumer à celle-ci :
pourquoi lorsqu'on affiche le code source dans le navigateur, on voit un passage à la ligne pour ce code :
echo "blabla \n bla"; 
et pas pour celui là :
echo 'blabla \n bla'; 

par Tchukai » 12 août 2008, 08:59

echo ord('n');  110.
Si charlist contient les caractères \n, \r etc., ils seront convertis à la mode du langage C
A la mode C (C-like) je ne sait pas ce que c'est. Cependant, dans mon exemple il s'agit de la simple lettre 'n' et non du caractère '\n'. Le 'n' se situant selon ord() à un indice ascii (110) > 26 et < 126. Le cas que je soulève ne devrait pas être concerné par ce paragraphe de la doc.

Apparemment le comportement ne serait pas imputable à addcslashes.
$chrord = chr(ord('\\')).chr(ord('n'));

// Toujours en regardant le code source (Ctrl-u sous Firefox).
echo "Blabla \n bla"; // Passage à la ligne -> oui.
echo "Blabla $chrord bla"; // Passage à la ligne -> non.

par Aureusms » 11 août 2008, 20:07

Est ce que c'est lié ?

string addcslashes ( string $str , string $charlist )
charlist : Une liste de caractères à échapper. Si charlist contient les caractères \n, \r etc., ils seront convertis à la mode du langage C, alors que les autres caractères non-alphanumériques ayant un code ASCII inférieur à 26, et supérieur à 126 sont remplacés par leur représentation octale.
Toi tu utilises n et non \n.

par Tchukai » 11 août 2008, 16:16

En fait je ne cherche pas à éviter le comportement mais à le comprendre.

par Berzemus » 11 août 2008, 15:11

et en utilisant des doubles quotes plutôt ?

Curiosité à propos de addcslashes() et de \n

par Tchukai » 11 août 2008, 14:24

Bonjour
.............

Je me pose une question au sujet de la fonction addcslashes() et du caractère de retour à la ligne \n.
Pourquoi quand je code ceci :
echo 'blabla \n bla';
et que je regarde le code source à partir du navigateur, je constate que le \n fait son travail de passage à la ligne,
alors que quand je code ceci :
echo addcslashes('blabla n bla', 'n');
le passage à la ligne ne s'effectue pas (toujours dans le code source).
Il affiche la même chose que si je code ceci :
echo 'blabla \\n bla';