Comment conserver les sauts de ligne d'un textarea passé par url via javascript

Eléphanteau du PHP | 43 Messages

10 mars 2008, 00:42

Bonsoir,

Je ne sais pas si je poste au bon endroit vu que je ne sais pas si mon problème est de l'ordre du javascript ou du php, mais il faut bien poster quelque part.. :?

Bref, j'essaie de mettre en place, un système de prévisualisation d'un texte issu d'un textarea venant d'un formulaire de post de forum.
le tout apparaît dans une pop-up, la mise en forme (bbcode : gras, italic, couleur et même code php, etc) y est presque complètement respectée, je dis presque parce que le texte perd ses retours à la ligne, et j'aimerais les lui remettre mais je n'arrive pas à trouver comment procéder.

le code du formulaire (épuré pour éviter d'en mettre trop long ici) :

Code : Tout sélectionner

<form method="post" action="postok.php?action=repondre&t=<?php echo $topic ?>" name="formulaire"> <p> <fieldset><legend><strong>Mise en forme</strong></legend> <input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" /> <br /><br /> <img src="../images/forum/smileys_bbcode/smile.gif" title="heureux" alt="heureux" onClick="javascript:smilies(' :huhu: ');return(false)" /> </fieldset> <br /><br /> <fieldset><legend><strong>Message</strong></legend><textarea cols=95 rows=10 id="message" name="message"></textarea></fieldset> <br /> <script language="javascript"> function previsu() { Message=document.formulaire.message.value; Adresse='previsu_post.php?message=' + Message; window.open(Adresse,'previsu', 'height=400, width=600, toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, directories=no, status=no'); } </script> <input type="button" value="Prévisualiser" onClick="previsu();return false;" /> <input type="submit" name="submit" value="Envoyer" /> <input type="reset" name="Effacer" value = "Effacer" /> </p></form>
puis le code de réception du contenu du textarea dans la pop-up :
<?php
include("bbcode.php");

if (isset($_GET['message']))
{
	if (!empty($_GET['message']))
	{
		$message = htmlentities($_GET['message']);
		echo '<div id="previsu">'.code($message).'</div>';
	}
	else
	{
		echo '<div id="previsu">Le champ est resté vide.</div>';
	}
}
?>
Auriez vous une idée d'une technique de remise en place des retours à la ligne ? J'ai essayé de lui appliquer un nl2br() à la réception mais ça ne change rien, peut-être qu'avec une fonction javascript équivalente à str_replace() de php, pourrait règler le problème..

Merci !
Clicky

d0m
Mammouth du PHP | 1141 Messages

10 mars 2008, 09:50

Salut,

tu peux essayer en utilisant la fonction javascript replace pour remplacer les caractères \r\n (sauts de lignes) par un autre caractère (<BR> par exemple).

Eléphanteau du PHP | 43 Messages

10 mars 2008, 15:44

Bonjour,

Merci d'essayer de m'aider :)

En fait, ta solution ne marche pas et j'avais oublié de dire aussi qu'un smiley ne s'affiche qu'avec un espace juste après, sinon il reste en version texte, genre : :smiley: au lieu de son image.

je vais refaire des essais, à part si y a vraiment pas moyen que ça marche.. :(

Merci !
Clicky

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 mars 2008, 17:41

Sur le principe, y a rien à redire, si ce n'est que la taille de l'url est limitée et que tu risques de perdre une partie du message en procédant ainsi...

En théorie $_GET['message'] contient bien les retours à la ligne saisis par l'utilisateur. Tu peux le vérifier facilement en l'affichant dans une balise <textarea> dans ta popup. Vérifies de même que c'est toujours bien le cas après le htmlentities().

Le nl2br devrait fonctionner pour ajouter des <br />, où l'as tu ajouté ? et que fait ta fonction code() ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 43 Messages

10 mars 2008, 18:54

Bonjour,

Merci pour la réponse :)
Sur le principe, y a rien à redire, si ce n'est que la taille de l'url est limitée et que tu risques de perdre une partie du message en procédant ainsi...
Y a-t-il alors un moyen via la fonction javascript, de le passer en post au lieu de get ?..
En théorie $_GET['message'] contient bien les retours à la ligne saisis par l'utilisateur. Tu peux le vérifier facilement en l'affichant dans une balise <textarea> dans ta popup. Vérifies de même que c'est toujours bien le cas après le htmlentities().
Dans un textarea et avec ou sans htmlentities, le post apparaît avec les équivalences html mais toujours pas de retour à la ligne.

j'ai essayé de mettre nl2br() pratiquement partout, avant, après htmlentities, et même après la fonction code(), mais rien ne change.

La fonction code() est le bbcode php pour la mise en forme du texte, dans le même fichier, il y a une fonction pour du code php (avec highlight_string()) en dehors de code(), ça ferait pas mal de ligne mais je peux mettre le contenu du fichier ici si ça peut aider..

Merci !
Clicky