Page 1 sur 1

retablir des sauts de ligne dans un textarea

Posté : 03 mai 2007, 15:52
par BeRoots
Salut à tous :)

j'ai un textarea dans lequel je doit afficher du texte un peu comme sur ce forum avec les saut de ligne pris en compte :?

en claire, si je balance des <br /> ou des \n \r directement entre mes balise <textarea></textarea>, ceux-ci s'affiche comme tel et ne sont pas representés comme des retours à la ligne dans le dit textarea :(

en regardant du coté du code source, pour chaque saut de ligne du contenu du textarea, on a un saut de ligne réel dans le code source html...

Voici ma chaine de depart à retourné dans textarea:
ma première ligne<br />ma seconde ligne<br />ma troisieme ligne...

doit on recuperer chaque portion de chaine comprise entre deux <br /> et les retourner en echo avec \n en fin d'echo ou y a t'il un moyen de remplacer chaque <br /> par quelquechose afin que ces saut de ligne soit pris en compte dans le textarea?

Posté : 03 mai 2007, 16:11
par sadeq
tu peux remplacer les <br /> par les \n automatiquement en utilisant soit javascript (méthode replace(): http://fr.selfhtml.org/javascript/objet ... tm#replace) ou PHP (fonction str_replace())

Posté : 03 mai 2007, 16:49
par BeRoots
ok merci ;)

le truc c'est que j'avit directement ecrit les \n \r dans le textarea alors qu'il fallai passer par un echo de la chaine :?

Posté : 04 mai 2007, 01:07
par BeRoots
ok j'ai fait des test mais rien de prometeur :?

je recupère ceci d'une db:
&eacute;t&eacute;<br />automne<br />hiver

je fait un str_replace:
$html_texte = str_replace('<br />', '\n', $html_texte);
ensuite je fait un echo de html_texte dans le textarea mais les \n ne sont pas pris en compte et sont affichés :?

si quelqu'un voit l'erreur ;)

Posté : 04 mai 2007, 07:45
par titerm
Pour une raison simple tu utlises des quotes la ou il faudrai des guillemets...

Entre quote, rien n'est évalué, ni les variables, ni les sequences d'echapement.
Entre guillemets, la chaine est évalué avant d'être utilisée

donc
echo '\n\r\t$toto' => va afficher \n\r\t$toto

et
echo "\n\r\t$toto" va afficher un new line, un carriage return, une tabulation et le contenu de la variable $toto

Posté : 04 mai 2007, 12:04
par sadeq
:pouce: +1 titerm
et on dit aussi qu'un echo de chaîne entre quotes est plus rapide que celui d'une chaîne entre guillemets car en fait, la chaîne entre quotes est une constante contrairement à celle entre guillemets qui est une variable dont le contenu est évalué s'il contient des formes dynamiques (variables php, caractères de contrôle, ...) avant l'usage.

Posté : 04 mai 2007, 12:13
par BeRoots
ok merci les gars ;)

j'ai fait un peu autrement et cela fonctionne...
// on traite la chaine recuperée en db afin de remplacer les saut de ligne
$tableau = array("<br />" => "\n", "<blockquote />" => "\t"); // tableau associatif des remplacement pour strtr()
$html_texte_horaire = strtr($db_html_texte_horaire, $tableau); // on remplace les tabulation et le saut de ligne

echo $xhtml_head_admin;
?>
            <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
               <div><div class="legend">Modification des horaires</div><div class="legend_fin">&nbsp;</div></div>
               <div id="fieldset_top"></div>
               <fieldset>
                  <label for="label_text_horaire">Texte de description des horaires :</label>
                  <textarea id="label_text_horaire" name="text_horaire" cols="70" rows="20"><?php echo $html_texte_horaire; ?></textarea>
                  <div class="c3">
                     <input type="submit" class="verif" name="modif_horaire" tabindex="1" value="Envoyer" />
                  </div>
               </fieldset>
               <div id="fieldset_bottom"></div>
            </form>
<?php
remarquer qu'il n'y a aucun "" dans le echo mais ça fonctionne :?

Par contre si quelqu'un peu me dire quel est l'element html pour un /r (carriage return)?
serai ce <wbr />?

Posté : 04 mai 2007, 13:44
par sadeq
$tableau = array("<br />" => "\n", "<blockquote />" => "\t"); 
remarquer qu'il n'y a aucun "" dans le echo mais ça fonctionne :?
Pas tout à fait vrai, tu as les fameuses "" dans ton tableau :lol: hihi.
Remarque qu'on parlait du fonctionnement d'une chaîne pas de l'echo

Concernant ta dernière question, le caractère de retour est en fait \r\n sous Windows et seulement \n sous Linux. Ils sont tous équivalent à <br> en HTML à ne pas confondre avec <p> en html qui veut dire "nouveau paragraphe" et qui fait aussi un retour à la ligne

Comme en bureautique, la différence est une question de mise en forme et mise en page
le <p> crée un nouveau paragraphe intrinsèque qui a ses propres proriétés de mise en forme par contre le <br> ne fait que forcer le texte à revenir à la ligne suivante tout en restant dans le même cadre de mise en forme du paragraphe parent.

<p> est un conteneur de texte alors que <br> n'est qu'une directive de retour à la ligne.

Posté : 04 mai 2007, 15:00
par BeRoots
merci pour ce complement d'information :)

j'ai encore quelques points à éclaircir... :?

1°) y a t'il une difference entre \n\r et \r\n? (moi lorsque j'affiche en echo ma chaine en remplacant les \r\n, j'ai une mauvaise indentation du code sources html qui passe à la ligne à chaque <br /> alors quand remplacant plutôt les \n\r, j'ai le code html de ma variable retourner afficher sur une même ligne) :-k

2°) comment faire pour que l'on puisse utiliser la touche tab pour les tbulation dans un texte area? (moi, des que je tape sur tab, je suis le tabindex du formulaire et je sort du textarea,alors que je voudrai avoir tabulation) :-k

merci d'avance ;)

Posté : 04 mai 2007, 15:22
par bidule
Je crois aussi que si tu rajoute la fonction n12br quand tu recuperes les informations du formulaire, les sauts de lignes sont pris en compte!

ex:

$formulaire = n12br($_POST['formulaire']);

bye bye!

Posté : 04 mai 2007, 17:08
par sadeq
Pour les tabs dans le textarea regardes cet exemple que j'ai biduier après recherche sur les insertions de texte et que tu peux développer.

Code : Tout sélectionner

<form> <p>donnée1<br><textarea name="d1" onKeyDown="return controler(this);" rows="10" cols="40"></textarea></p> <p><input type="submit" name="ok" value="Ok"></p> </form> <script> function controler(objet){ //quelle touche pressée? var keyCode = window.event.keyCode; //traitement des touches switch (keyCode){ //touche tabulation case 9: insertText("\t", objet); //inserer un \t (tabulation) return false; //et annuler l'action de la touche } return true; //passer } function insertText(texte, objet) { //insérer le text donné à l'emplacement du curseur dans l'objet donné if (objet.createTextRange) //si on peut accéder à la sélection { objet.focus(objet.caretPos); //se positionner sur la position pointée par le curseur objet.caretPos = document.selection.createRange().duplicate(); //obtenir le texte sélectionné au curseur objet.caretPos.text = texte; //insérer le texte volu } else objet.value += texte; //sinon l'ajouter à la fin } </script>

Posté : 04 mai 2007, 17:30
par BeRoots
merci bien pour toutes ces info :)

je vais voir si j'utilise javascript ou non... :-k