Lost carriage return from SQL

Résolu
danmon Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
danmon Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

1 réponse

sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   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
danmon Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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
sandul Messages postés 3927 Date d'inscription   Statut Membre Dernière intervention   723 > danmon Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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
macgawel Messages postés 664 Date d'inscription   Statut Membre Dernière intervention   89 > danmon Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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
danmon Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > macgawel Messages postés 664 Date d'inscription   Statut Membre Dernière intervention  
 
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
macgawel Messages postés 664 Date d'inscription   Statut Membre Dernière intervention   89 > danmon Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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