Lost carriage return from SQL

Résolu
danmon Messages postés 7 Statut Membre -  
danmon Messages postés 7 Statut Membre -
Bonjour,

J'ai un problème avec les retours à la ligne lorsque je prends un texte de ma base de données MySQL et que j'affiche ce texte. Voici un exemple qui explique le tout très clairement:

1. j'écris un texte et je le SUBMIT à ma BD. soit:

voici un exemple

de texte avec
des retours à la ligne.

2. lorsque je prends ce texte de la BD et que je l'imprime à l'écran ça me donne le suivant:

voici un exemplede texte avecdes retours à la ligne.

Comme vous voyez les retours à la ligne sont perdus. Ce que j'aimerai faire c'est essayer de reconnaître les retours à la ligne du texte dans la BD et les convertir en </br> avec ceci par exemple:
$message = preg_replace("/(\r\n¦\n¦\r)/", "</br>", $aResSQL['Message']);
et ensuite cela donne une bonne affichage. Le seul problème est que la fonction ne reconnaît pas \r\n ni \n ni \r.

Savez vous ce que MySQL utilise comme retour à la ligne (carriage return)?

Un grand merci
Configuration: Windows XP
Firefox 2.0.0.14

1 réponse

  1. sandul Messages postés 4013 Statut Membre 723
     
    Salut,

    Normalement, si ton champ de stockage est un varchar, tu devrais avoir tes CR d'origine dedans. Donc plusieurs alternatives:

    1. Les CR sont perdus à l'écriture dans la base
    2. Les CR sont bien présents dans la base mais c'est le programme qui fait la lecture qui te les élimine

    Faire un test:
    DROP TABLE test2;
    CREATE TABLE test2 (a VARCHAR(10));
    INSERT INTO test2
         VALUES ('1
    2'          );
    SELECT LENGTH (a)
      FROM test2;
    


    ==> affichage:
    Table dropped.
    Table created.
    1 row created.
    
     LENGTH(A)
    ----------
             3
    
    1 row selected.
    


    et voir ce que cela donne (concernant la syntaxe: sur Oracle, adapte-là si nécessaire à MySQL). Donc la longueur est bel et bien 3, le CR est présent dans la base.

    hth,
    +++
    0
    1. danmon Messages postés 7 Statut Membre
       
      Salut Sandul,

      Mon cas correspond bien à ton cas 2. Les CR sont conservés dans la BD.

      Le champs est de format: "text" et de type: "utf8_unicode_ci"
      0
    2. sandul Messages postés 4013 Statut Membre 723 > danmon Messages postés 7 Statut Membre
       
      Oki... le souci c'est que pour cette option je ne peux pas aider, <honte>car moi et le PHP = 2</honte> En Java, par exemple, j'afficherais en héxa le soustring correspondant à un CR pour voir son contenu...
      0
    3. macgawel Messages postés 676 Statut Membre 89 > danmon Messages postés 7 Statut Membre
       
      Bonjour.

      En php, il y a une fonction qui te fait ça automatiquement :
      nl2br (string) => Retroune le texte, en remplaçant les fins de ligne par des <br />
      0
    4. danmon Messages postés 7 Statut Membre > macgawel Messages postés 676 Statut Membre
       
      merci quand même Sandul et merci macgawel,

      Mais le problème c'est que nl2br ne reconnaît pas les CR tout comme la fonction preg_replace().

      Est-ce que MySQL charge les CR d'une autre façon que \n ou \r\n??
      0
    5. macgawel Messages postés 676 Statut Membre 89 > danmon Messages postés 7 Statut Membre
       
      Mais le problème c'est que nl2br ne reconnaît pas les CR tout comme la fonction preg_replace().

      Et en faisant le remplacement avant d'envoyer le texte dans ta base ? :-P
      0