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 :

Différence d'interprétation de \n


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 71
    Points : 41
    Points
    41
    Par défaut Différence d'interprétation de \n
    Bonjour à tous,

    J'ai un problème bizarre et je n'arrive pas à le résoudre.

    En effet, j'utilise la fonction php Explode pour séparer un texte et le séparateur est déterminé dans un formulaire.

    Lorsque je saisis \n comme séparateur, cette valeur est envoyée en POST à une page qui va séparer le texte. Mais cela ne fonctionne pas. J'ai donc noté la valeur en dur dans la page et cela fonctionne. Pourtant, je ne vois aucune différence entre mes deux variables (celle en dur et celle envoyée par le formulaire).

    Voici le bout du code intéressant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // $_POST['separateur'] vaut "\n"
    $separateur = stripslashes($_POST['separateur']);
    $valeur = "\n";
     
    echo "Séparateur = ".$separateur."<br />";
    echo "valeur = ".$valeur."<br />";
    Si je mets ce code, cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $contenu = str_replace($valeur, "[r]", $contenu);
    Si je mets ce code, cela ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $contenu = str_replace($separateur, "[r]", $contenu);
    Techniquement, j'ai saisi dans le champs de formulaire, la même valeur que $valeur. Mais le PHP considère les 2 valeurs comme différentes.

    Qu'est ce qui ne va pas?

    Merci par avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 255
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 255
    Points : 8 551
    Points
    8 551
    Billets dans le blog
    17
    Par défaut
    Le littéral \n provenant de ton formulaire représente les octets : ord('\') = 92 et ord('n') = 110.
    Alors que l'expression \n représente un caractère spécial non-imprimable ord("\n") = 10.
    => En PHP "\n" est différent de '\n', là c'est la même problématique

    http://www.php.net/manual/fr/language.types.string.php

  3. #3
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Il est existe 2 façons pour "voir" (je met entre guillement parce qu'on peut quand même pas vraiment le voir vu qu'il s'agit d'un retour à la ligne) :

    1: dans un textarea
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    echo "<textearea>";
    echo "je met du texte, puis j'introduis mon separateur ".$separateur;
    echo "si le séparateur existe, cette phrase sera sur une nouvelle ligne";
    echo "</textarea>";
    2: dans le code source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for( $i = 0; $i < 3; $i++ ) {
       echo "<p>ce code sera toujours sur une nouvelle ligne dans la page HTML</p>";
       echo $separateur;
       echo "<p>si le séparateur existe, ce code sera sur une nouvelle ligne DANS LE CODE SOURCE</p>";
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 71
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Il est existe 2 façons pour "voir" (je met entre guillement parce qu'on peut quand même pas vraiment le voir vu qu'il s'agit d'un retour à la ligne) :

    1: dans un textarea
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    echo "<textearea>";
    echo "je met du texte, puis j'introduis mon separateur ".$separateur;
    echo "si le séparateur existe, cette phrase sera sur une nouvelle ligne";
    echo "</textarea>";
    2: dans le code source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for( $i = 0; $i < 3; $i++ ) {
       echo "<p>ce code sera toujours sur une nouvelle ligne dans la page HTML</p>";
       echo $separateur;
       echo "<p>si le séparateur existe, ce code sera sur une nouvelle ligne DANS LE CODE SOURCE</p>";
    }
    Je me permet de te poser une question car j'ai transposé ton code sur ma page pour faire un test avec le séparateur envoyé en POST via un formulaire.

    Et dans les 2 cas, il n'est pas interprété comme un retour à la ligne et s'affiche dans le code source.

    Comment transformer rd('\') = 92 et ord('n') = 110 en ord("\n") = 10?

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 255
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 255
    Points : 8 551
    Points
    8 551
    Billets dans le blog
    17
    Par défaut
    Avec str_replace( ).

Discussions similaires

  1. IE et Firefox : différences d'interprétation de Javascript
    Par skythe dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/01/2009, 12h40
  2. [Div] Différence d'interprétation FireFox/IE
    Par hedgehog dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 16/10/2007, 12h03
  3. [W3C] IE/firefox: différence d'interprétation
    Par Braillane dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 11/05/2007, 19h31
  4. Différence d'interprétation 'buffer' et '&buffer'
    Par MogDeChNord dans le forum C
    Réponses: 9
    Dernier message: 04/10/2006, 14h00
  5. [SQL-Server] Différence d'interprétation de date en PHP par rapport à ASP sur SQLServer
    Par berceker united dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/06/2006, 16h28

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