textarea to text file : problème de saut de ligne

VaN
Mammouth du PHP | 1107 Messages

30 mai 2011, 18:36

Bonsoir,

J'essaye de créer un fichier texte à partir d'un formulaire, dont un textarea.

Voici mon code :
// Creation du fichier texte
			$filename = $request_id . '.txt';
			$handle = fopen('requests/' . $filename, "w");
			fwrite($handle,  "Description : " . $clean['request_description'] . "\n");
			fclose($handle);
Si dans le textarea "request_description", je tape :
Lorem
ipsum
je vais me retrouver avec un fichier texte contenant :
Lorem\r\nipsum
, ce que je ne comprend pas bien. Pourquoi le retour chariot est-il mal interprété par fwrite() ?
J'ai essayé un str_replace("\r\n", "\n", $clean['request_description'])); mais aucun changement.

Eléphant du PHP | 80 Messages

31 mai 2011, 09:07

Bonjour,

Tu fais ça sans base de données ?
En informatique, lorsqu'il y a un bug, le souci est toujours entre la chaise et le clavier.

Mammouth du PHP | 672 Messages

31 mai 2011, 09:20

Bonjour.

A quoi correspond ton $clean['request_description'], au juste ?

VaN
Mammouth du PHP | 1107 Messages

31 mai 2011, 09:49

Bonjour,

Tu fais ça sans base de données ?
Si, j'insère ensuite le contenu du formulaire dans une base. Mais le client veut en plus recevoir le contenu du formulaire dans un fichier texte, envoyé par mail.



Bonjour.

A quoi correspond ton $clean['request_description'], au juste ?
$clean['request_description'] = mysql_real_escape_string($_POST['request_description']);
Et $_POST['request_description'] est mon textarea.

Mammouth du PHP | 672 Messages

31 mai 2011, 10:02

RTFM
mysql_real_escape_string() appelle la fonction mysql_escape_string() de la bibliothèque MySQL qui ajoute un slash aux caractères suivants : NULL, \x00, \n, \r, \, ', " et \x1a.
En clair :
1. Tu récupères ta chaîne Lorem\r\nipsum
2. Tu l'échappes avec mysql_real_escape_string => Lorem\\r\\nipsum
3. Tu l'écris dans ton fichier => Lorem\r\nipsum.
C'est ce qui est écrit. Le "\\" est interprété par PHP comme "le premier slash echappe le deuxième qui est traité comme un caractère"...

VaN
Mammouth du PHP | 1107 Messages

31 mai 2011, 10:20

RTFM
mysql_real_escape_string() appelle la fonction mysql_escape_string() de la bibliothèque MySQL qui ajoute un slash aux caractères suivants : NULL, \x00, \n, \r, \, ', " et \x1a.
En clair :
1. Tu récupères ta chaîne Lorem\r\nipsum
2. Tu l'échappes avec mysql_real_escape_string => Lorem\\r\\nipsum
3. Tu l'écris dans ton fichier => Lorem\r\nipsum.
C'est ce qui est écrit. Le "\\" est interprété par PHP comme "le premier slash echappe le deuxième qui est traité comme un caractère"...
mmhh bien vu.. J'ai tellement l'habitude de passer toutes mes variables dans un mysql_real_escape_string() que j'en ai oublié les effets :p