Lost carriage return from SQL

Résolu/Fermé
danmon Messages postés 7 Date d'inscription dimanche 20 avril 2008 Statut Membre Dernière intervention 9 octobre 2008 - 4 juin 2008 à 18:30
danmon Messages postés 7 Date d'inscription dimanche 20 avril 2008 Statut Membre Dernière intervention 9 octobre 2008 - 5 juin 2008 à 11:10
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

1 réponse

sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
4 juin 2008 à 18:39
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 dimanche 20 avril 2008 Statut Membre Dernière intervention 9 octobre 2008
4 juin 2008 à 18:45
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 jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723 > danmon Messages postés 7 Date d'inscription dimanche 20 avril 2008 Statut Membre Dernière intervention 9 octobre 2008
4 juin 2008 à 18:50
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 mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89 > danmon Messages postés 7 Date d'inscription dimanche 20 avril 2008 Statut Membre Dernière intervention 9 octobre 2008
4 juin 2008 à 18:51
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 dimanche 20 avril 2008 Statut Membre Dernière intervention 9 octobre 2008 > macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008
4 juin 2008 à 19:15
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 mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89 > danmon Messages postés 7 Date d'inscription dimanche 20 avril 2008 Statut Membre Dernière intervention 9 octobre 2008
4 juin 2008 à 19:20
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