Bonjour,
La question est dans le titre. On retrouve ces sigles pour les textareas. Le \n se transforme en <br /> avec la fonction php nl2br().
Mais que veulent dire les \r et \0 ?
Bonjour,
La question est dans le titre. On retrouve ces sigles pour les textareas. Le \n se transforme en <br /> avec la fonction php nl2br().
Mais que veulent dire les \r et \0 ?
\n [LF] c'est un saut de ligne
\r [CR] c'est un retour de chariot
\0 je crois que c'est NULL.
^^ corrigez-moi si je me trompe, je dis ca de mémoire.
Sous windows un saut de ligne (quand tu appuie sur ENTER), c'est 2 caractère:
CrLf , soit \r\n , donc les chr #13 et #10
Sous linux, c'est seulement \n
Sous MAC (la je suis vraiment pas certain), je crois que c'est juste \r
salut,
Pour la précision sur les sauts de ligne, peut-être voir du côté de ce lien:
http://fr.php.net/manual/fr/function.fopen.php
Pour les autres caractères spéciaux, tu peux jeter un oeil ici:Envoyé par ce lien
http://fr.php.net/manual/fr/language....syntax.double
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
N'oubliez pas de cliquer surquand votre question à trouvé une solution.
Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!
pas sur que ce soit valide en php...Envoyé par Dia_FR
Ok,
Alors en fait je demande ça parce que j'essaie de supprimer les espaces vides à l'intérieur du textarea et d'empêcher les retours à la ligne impromptus.
J'explique :
Dans la base de donnée, le texte stockés comporte plein d'espaces partout. A l'affichage dans le site, il s'affiche bien.
Mais si je l'insère dans un textarea, les espaces sont reproduits. Déjà c'est pas très lisible, car il s'agit alors de modifier le texte donc autant avoir une mise en page normal. Mais en plus, après validation les sauts de lignes non souhaités se transforment en <br>.
Bon, pour le problème de la validation, j'ai résolu la chose en transformant les signes en question en espace vide, avec eregi_replace().
Mais par contre je n'arrive pas à afficher le texte sans espace ni saut de ligne impromptus à l'intérieur du textarea, depuis celui enregistré dans la BD qui comporte aussi des espaces.
Une regex pour supprimer les espaces entre le texte dans la base de donnée et l'affichage dans le textarea ?Envoyé par Dia_FR
J'ai rien contre, mais je doute que ça fonctionne car en fait ces espaces sont "virtuels" (désolé je vois pas quel mot employer) : Dans le texte de la page côté client, l'affichage est tout à fait normal, donc ces espaces "n'existent pas".
pour etre plus précis, \x correspond au caractere de code ascii x, donc \0 correspond au caractere ascii de code 0, souvent utilisé pour indiquer la fin d'une chaine de caractere, mais ca depend du langage et des conventions.
\n est un "raccourci" pour le caractere ascii 10 (A en hexa)
\r est un "raccourci" pour le caractere ascii 13 (D en hexa)
Tout les caracteres ascii inferieurs a 32 ne sont pas "visibles", donc si tu veux les supprimer tu peux faire quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // gestion des retours chariots compatible mac, windows, linux $chaine=str_replace(array("\r\r", "\r\n", "\r"), "\n", $chaine); // conversions des retours chariots en <br> $chaine=nl2br($chaine); // remplacement par espace des autres caracteres inferieurs a 32 for($i=0; $i<strlen($chaine); $i++) { if (ord($chaine{$i}) < 32) { $chaine{$i} = ' '; } } // remplacement de plusieurs espaces par un seul $chaine=preg_replace('# +#', ' ', $chaine);
Houa ça donne un résultat pas mal du tout ton code, Fladnag, merci ! (merci aux autres aussi)
Alors au final, mon code donne ça :
Honnêtement, je pige pas grand chose à mon code là. Je sais même pas si y'a pas des trucs complètement inutiles...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 $definition=str_replace(" \0"," ",$definition); $definition=str_replace(" \n"," ",$definition); $definition=str_replace(" \r"," ",$definition); $definition=str_replace("\0"," ",$definition); $definition=str_replace("\n"," ",$definition); $definition=str_replace("\r"," ",$definition); //les <<br> sont transformé en \n pour reproduire dans le textarea une mise en page fidèle au contenu coté client. // gestion des retours chariots compatible mac, windows, linux $definition=str_replace(array("\r\r", "\r\n", "\r"), "\n", $definition); // conversions des retours chariots en <br> $definition=nl2br($definition); // remplacement par espace des autres caracteres inferieurs a 32 for($i=0; $i<strlen($definition); $i++) { if (ord($definition{$i}) < 32) { $definition{$i} = ' '; } } // remplacement de plusieurs espaces par un seul $definition=preg_replace('# +#', ' ', $definition); $definition=str_replace("<br>", "\n", "$definition");![]()
réponse : oui ;o) y a des trucs inutiles ;o)Envoyé par JackBeauregard
Bon, je te conseille de garder juste ca :
Là en principe tu n'a plus dans $definition que des \n eventuels.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // gestion des retours chariots compatible mac, windows, linux $definition=str_replace(array("\r\r", "\r\n", "\r"), "\n", $definition); // remplacement par espace des caracteres inferieurs a 32 sauf le retour chariot for($i=0; $i<strlen($definition); $i++) { if ((ord($definition{$i}) < 32) && ($definition{$i} !== "\n")) { $definition{$i} = ' '; } } // remplacement de plusieurs espaces par un seul $definition=preg_replace('# +#', ' ', $definition);
Donc apres tu as 2 possibilités :
* Soit tu veux pas garder les retour chariots et tu ajoute un* Soit tu veux afficher les retour chariots et tu ajoute un
Code : Sélectionner tout - Visualiser dans une fenêtre à part $definition=str_replace("\n", "", $definition);
Code : Sélectionner tout - Visualiser dans une fenêtre à part $definition=nl2br($definition);
Partager