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 :

[Système] Que veulent dire les sigles \n, \r \0 ?


Sujet :

Langage PHP

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut [Système] Que veulent dire les sigles \n, \r \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 ?

  2. #2
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    \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

  3. #3
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    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
    Citation Envoyé par ce lien
    Note : Les systèmes d'exploitation utilisent différents caractères pour les nouvelles lignes. Lorsque vous écrivez un fichier texte, et insérez une nouvelle ligne, vous devez utiliser le bon caractère pour votre système d'exploitation. Les systèmes Unix utilisent \n comme nouvelle ligne, les systèmes Windows utilisent \r\n, et les systèmes Macintosh utilisent \r.
    Pour les autres caractères spéciaux, tu peux jeter un oeil ici:
    http://fr.php.net/manual/fr/language....syntax.double

  4. #4
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    \0 est une fin de chaîne de caractères

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par Dia_FR
    \0 est une fin de chaîne de caractères
    pas sur que ce soit valide en php...

  6. #6
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    heu ouais, j'ai répondu un peu vite, c'est en C/C++ et j'ai supposé que c'était pareil en PHP

    sur le lien que MasterOfChakhaL a filé on peut lire
    \[0-7]{1,3} Une séquence de caractères qui permet de rechercher un nombre en notation octale.
    donc \0 c'est pas EOS

  7. #7
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    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.

  8. #8
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    utilise une regex pour, si tu trouves un espace, remplacer tous ceux qui suivent par ''

  9. #9
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Citation Envoyé par Dia_FR
    utilise une regex pour, si tu trouves un espace, remplacer tous ceux qui suivent par ''
    Une regex pour supprimer les espaces entre le texte dans la base de donnée et l'affichage dans le textarea ?

    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".

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    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);

  11. #11
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    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 :

    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");
    Honnêtement, je pige pas grand chose à mon code là. Je sais même pas si y'a pas des trucs complètement inutiles...

  12. #12
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par JackBeauregard
    Honnêtement, je pige pas grand chose à mon code là. Je sais même pas si y'a pas des trucs complètement inutiles...
    réponse : oui ;o) y a des trucs inutiles ;o)

    Bon, je te conseille de garder juste ca :
    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);
    Là en principe tu n'a plus dans $definition que des \n eventuels.

    Donc apres tu as 2 possibilités :
    * Soit tu veux pas garder les retour chariots et tu ajoute un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $definition=str_replace("\n", "", $definition);
    * Soit tu veux afficher les retour chariots et tu ajoute un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $definition=nl2br($definition);

Discussions similaires

  1. Que veulent dire tout ses Panels et Layouts? GXT
    Par lenny32 dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 21/04/2011, 09h18
  2. Site attaqué ou autre, que veulent dire ces erreurs?
    Par planete dans le forum Serveurs (Apache, IIS,...)
    Réponses: 6
    Dernier message: 10/12/2008, 20h13
  3. [signature] Que veulent dire vos signatures
    Par zandru dans le forum La taverne du Club : Humour et divers
    Réponses: 34
    Dernier message: 30/08/2008, 12h41
  4. Réponses: 2
    Dernier message: 24/02/2008, 23h56
  5. Que veut dire les + dans une table?
    Par La Zélie dans le forum Modélisation
    Réponses: 2
    Dernier message: 01/02/2008, 15h06

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