Rechercher : dans
Par :

Probleme de retour à la ligne dans textarea

Dernière réponse le 25 aoû 2007 à 12:04:33 loicabel, le 24 aoû 2007 à 22:01:33 
 Signaler ce message aux modérateurs

Bonjour

je suis en train de créer un systeme de post qui permetra de poster des cours. L'utilisatur saisi son texte dans un textarea, puis dans la page php correspondante j'enregistre ce texte sur un fichier .txt sur le serveur.
Mon poblème est que les retours à la ligne ne sont pas conservés. J'ai essayé d'utiliser nl2br, et replace, mais ni l'un ni l'autre ne se sont montrés efficaces.
De plus sous I.E et Firefox mes textarea sont interprété comme des zone text simples alors que sous opéra non.

quelqu'un pourrait il m'aider?

voici le script concerné :

<html>
...
<input type="textarea" name="texte" rows="50" cols="200">

Configuration: Windows XP
Opera 9.23

Meilleures réponses pour « Probleme de retour à la ligne dans textarea » dans :
Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF) VoirConversion format de fichier DOS UNIX / UNIX DOS Préambule Ce qu'il faut savoir Conversion DOS vers UNIX Conversion UNIX vers DOS Préambule Il existe déjà des utilitaires (dos2unix et unix2dos) qui s'acquittent très bien ce...

1

Dalida, le 24 aoû 2007 à 22:15:54

Salut,

en premier, essaie avec la bonne balise : <textarea>.

ça devrait déjà aranger la situation , après on verra ce qui reste !

[ Mathieu ]

Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

2

loicabel, le 24 aoû 2007 à 22:24:31

Effectivement cela règle le problème entre les différends navigateurs.
Mais j'ai toujours mo problème de retour à la ligne.

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

3

Dalida, le 24 aoû 2007 à 22:29:56

Alors, on se récapitule !!!
l'utilisateur effectue une saisie dans la zone.
et tu souhaite récupérer les retours à la ligne (CR/LF) pour que le texte soit formaté comme la saisie ?

si c'est ça, est-ce que tu t'es posé la question d'utiliser carrément un éditeur de texte ?
est-ce qu'un retour au format html te conviendrait ?
si oui regarde ce que fait FCKEditor.
(il y en a surement d'autres, moi j'ai essayer celui là je le trouve très bien !)

je te conseille ça parce que je crois que ton problème est une vraie prise de tête. je crois avoir lu quelque chose à ce sujet mais je ne sais plus. faute de neurones, je vais essayer de trouver des infos !

<edit>
et non !!!
c'est pas du tout ce que je pensais…
donc regarde l'éditeur, on sait jamais ça pourrait te plaire…
pour ton problème est-ce que tu as un exemple d'entrée et de sortie des données ?
si tu fais un :

echo (nl2br(htmlentities($_POST['textarea'])));

qu'est-ce que ça donne ?
</edit> [ Mathieu ]
Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

4

loicabel, le 24 aoû 2007 à 22:39:00

Merci beaucoup. je vais essayer et je te tiens au courant de mon succès ou non.
je te confirme que autrement c'est une prise de tête car cela fait 2 jours que je coince là dessus...

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

5

loicabel, le 24 aoû 2007 à 22:49:40

Effectivement cela fonctionne avec echo (nl2br(htmlentities($_POST['textarea'])));
mais je souhaiterai l'écrire en une seule ligne dans le fichier.
à tu une idée de comment faire ?

excuse moi si mes questions sont des questions de bases mais je suis débutants.

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

6

Dalida, le 24 aoû 2007 à 22:53:28

Peux tu nous monter le code source produit par 'echo()' ?
si ça s'affiche correctement il doit y avoir les balises html ad hoc.

tu le veux en texte brut ou en html ?
[ Mathieu ]

Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

7

loicabel, le 24 aoû 2007 à 22:59:15

Il ne produit pas de code, mais il renvoit le texte telquel, avec les retours à la lignes.
j'ai réussi à faire ce que je voulais avec un replace, mais la methode ne me convient pas car il peut y avoir confusion avec la frappe de l'utilisateur.
Si tu as une idée je suis preneur.

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

8

Dalida, le 24 aoû 2007 à 23:03:58

Et si tu le stockes dans le fichier tel quel et tu appliques 'nl2br()' à ce que tu as enregistré, ça fonctionne ?
[ Mathieu ]

Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

9

loicabel, le 24 aoû 2007 à 23:11:44

Oui ca fonctionne.
j'ai un dernier problème avecles caractère spéciaux du type apostrophe, qu'il retranscrit " \ ' ". je suppose qu'il faut que j'utilise un htmlentities(), mais je n'arrive pas à le placer correctement.
peux tu encore m'aider stp?

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

10

Dalida, le 24 aoû 2007 à 23:19:01

'htmlentities()' peut prendre le paramètre 'ENT_NOQUOTES' pour ignorer apostrophes et guillemets.

plus d'infos
[ Mathieu ]

Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

11

loicabel, le 24 aoû 2007 à 23:27:00

En fait ce n'est pas ce que je voulais.
Il me renvoit par exemple le texte suivant :
coucou§§§§§§§§c \' est moi (dans mon fichier texte). les syboles § corespondent à la chaine qui remplace le retour à la ligne.
je voudrais ne pas voir l'anti slasch mais que l'utilisateur puisse l'utiliser dans son texte. je ne peux donc pas utiliser le replace. comment faire?

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

12

Dalida, le 24 aoû 2007 à 23:39:15

As-tu essayé 'htmlentities($var, ENT_NOQUOTES)' ?
[ Mathieu ]

Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

13

Dalida, le 24 aoû 2007 à 23:43:46

Peux-tu refaire un point sur la méthode exacte que tu utilises ?
parce que avec 'nl2br()' ça devrait fonctionner tout seul.

y a un truc qui m'échappe !
[ Mathieu ]

Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

14

loicabel, le 24 aoû 2007 à 23:44:30

Oui, mais ca m'affiche les codes html alors que je ne les veux pas.

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

15

Dalida, le 24 aoû 2007 à 23:46:45

Tu fais quoi exactement (replace(), htmlentities()…) et dans quel ordre ?
[ Mathieu ]

Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

16

loicabel, le 24 aoû 2007 à 23:54:11

Je receptionne ma variable et je la transforme pour la mettre dans mon fichier :

$texte=str_replace(chr(10),'§§§§§',$texte);
$texte=str_replace(chr(13),'§§§§',$texte);
$texte=str_replace(chr(13),'§§§§',$texte);

puis dans une autre page (celle pour consulter) :

<?php
$monfichier=fopen('toto.txt','r+');
$ligne=fgets($monfichier);
fclose($monfichier);
$ligne=str_replace('§§§§§',chr(10),$ligne);
$ligne=str_replace('§§§§',chr(13),$ligne);
echo (nl2br(htmlentities($ligne)));
?>

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

17

Dalida, le 25 aoû 2007 à 00:14:47

Y a moyen de faire beaucoup mieux, c'est sûr !
reste plus qu'à trouver...

au lieu d'ouvrir le fichier tu peux soit placer le contenu dans une balise <object>, soit l'interpréter comme du php.

<object>

<object data="file.txt" type="text/plain" width="772px" height="400">
	alt : <a href="file.txt">Fichier texte</a>
</object>

php
<?php
ob_start();
include('file.txt');
$text = ob_get_contents();
ob_end_clean();
?>


ce sont des pistes, à mon avis la première n'est pas pratique, la deuxième est à creuser car tu récupères le contenu du fichier texte en l'interprétant comme du php.

en <14> tu dis ne pas vouloir de balise mais comment affiches tu le texte ?
[ Mathieu ]
Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida

18

loicabel, le 25 aoû 2007 à 09:00:16

En <14> j'utilise echo, et c'a m'affiche des <br> a la place des retours à la ligne. en fait il me faudrait une fonction qui fasse l'inverse de nb2lr pour l'affichage, ca serai nickel, enfin je crois...

sinon je vais creuser les pistes surtout celle en php pk je ne connait pas (encore!!!) les objects.

Configuration: Windows XP
Opera 9.23

Répondre à loicabel

19

 Dalida, le 25 aoû 2007 à 12:04:33

Salut,

je suis sûr que l'on passe à côté d'une évidence par manque de connaissance du sujet.
mais bon, on peut toujours tenter de bricoler…

pour la fonction inverse de 'nl2br()' j'ai trouvé çà dans le manuel php :

admin at ninthcircuit dot info
06-Jun-2005 11:00
As stated in the manual above, PHP's nl2br() feature only puts a "<br />" tag before each newline ("\n"). So -- if you intend to code a br2nl() function for yourselves, all you have to do is remove every occurence of "<br />" or "<br>".

Rather than get into nasty regular expressions to accomplish this, just use what PHP has built in already --  str_replace():

<?php
    /* br2nl for use with HTML forms, etc. */
    function br2nl($text)
    {
        /* Remove XHTML linebreak tags. */
        $text = str_replace("<br />","",$text);
        /* Remove HTML 4.01 linebreak tags. */
        $text = str_replace("<br>","",$text);
        /* Return the result. */
        return $text;
    }
?>

The final result from this function being called is whatever was entered before XHTML/HTML linebreaks were added.

All newlines are preserved by default, as per PHP ln2br() specification. Since the code above preserves newlines also, you can expect your data to reappear in the same way it was entered.

[ Mathieu ]
Il y a surement des pandas pour ne dépendre de rien

Répondre à Dalida