les sauts de ligne dans un textarea

Je sais que lors de l'enregistrement d'une zone de texte, vous pouvez utiliser nl2br () ou str_replace pour changer les balises / n en BR, etc. Cependant, ce que je ne suis pas sûr de la façon d'insérer des sauts de ligne dans une zone de texte. Je ne peux pas trouver beaucoup de choses à remettre les données dans une zone de texte avec ces sauts de ligne.

Par exemple, j'ai un formulaire où les utilisateurs peuvent mettre à jour les champs. Ainsi, l'utilisateur peut entrer:

foo
bar
baz

Lorsque cela est enregistré dans la base de données qu'il serait enregistré comme:

foo<br />bar<br />baz<br />

Maintenant, quand cet utilisateur revient à cela forme après un rafraichissement de la page tous les champs sont automatiquement remplis avec leurs données précédentes en prenant les données de la base de données.

Cependant, la zone de texte affiche les balises br sous forme de texte au lieu d'ajouter dans les sauts de ligne. j'ai également essayé de changer les balises br EN / n en espérant que le textarea les interpréterait comme des sauts de ligne mais pas de joie. En plus de cela, j'ai aussi essayé de m'échapper, etc.

Donc, mes questions sont: Est-ce que cela peut être fait? Ou plus important encore peut-il être fait en utilisant HTML/PHP (im en utilisant smarty). Si ce n'est pas possible, cela peut-il être fait en utilisant javascript?

Des exemples seraient appréciés.

Merci de lire

31
demandé sur fl3x7 2011-06-26 01:30:59

13 réponses

Ne faites pas nl2br lorsque vous l'enregistrez dans la base de données. Faites nl2br lorsque vous affichez le texte en HTML. Je peux fortement recommander de ne pas stocker de formatage HTML dans la base de données (sauf si vous utilisez également un éditeur HTML riche, auquel cas il serait stupide de ne pas le faire).

Une nouvelle ligne {[2] } deviendra simplement une nouvelle ligne dans la zone de texte.

61
répondu Halcyon 2011-06-25 21:33:36

Vous pouvez utiliser str_replace pour remplacer les <br /> étiquettes en caractères de fin de ligne.

str_replace('<br />', PHP_EOL, $textarea);

Vous pouvez également enregistrer les données dans la base de données sans d'abord appeler nl2br. De cette façon, les sauts de ligne resteraient. Lorsque vous affichez en HTML, appelez nl2br. Un avantage supplémentaire de cette approche est qu'elle nécessiterait moins d'espace de stockage dans votre base de données car un saut de ligne est de 1 caractère par opposition à "<br />" qui est de 6.

25
répondu Francois Deschenes 2012-05-18 18:52:14

Ahh, c'est vraiment simple

Il suffit d'ajouter

white-space:pre-wrap;

À votre élément d'affichage css

Je veux dire si vous montrez le résultat en utilisant <p> alors votre css devrait être

p{
   white-space:pre-wrap;
}
21
répondu Nizam Kazi 2013-09-05 09:01:17

Vous pouvez utiliser le code suivant:

$course_description = nl2br($_POST["course_description"]);
$course_description = trim($course_description);
4
répondu rahul 2015-05-19 22:47:58

Ma recommandation est d'enregistrer les données dans la base de données avec des sauts de ligne au lieu de les analyser avec nl2br. Vous devez utiliser nl2br en sortie pas en entrée.

Pour votre question, vous pouvez utiliser php ou javascript:

PHP:

str_replace('<br />', "\n", $textarea);

JQuery:

$('#myTextArea').val($('#myTextArea').val().replace(@<br />@, "\N"));
1
répondu Ryan Casas 2011-06-25 21:36:00

La manière simple:

  1. Utilisez ceci pour insérer dans mysql:

    $msg = $_GET['msgtextarea']; //or POST and my msg field format: text
    $msg = htmlspecialchars($msg, ENT_QUOTES);
  2. Et utilisez ceci pour la sortie:

    echo nl2br($br['msg']);
1
répondu Vũ Lê Ngọc Anh 2017-03-23 03:09:50

Côté PHP: de la chaîne Textarea à la chaîne PHP

$newList = ereg_replace( "\n",'|', $_POST['theTextareaContents']);

Côté PHP: chaîne PHP retour à la chaîne TextArea:

$list = str_replace('|', '&#13;&#10;', $r['db_field_name']);
0
répondu gibberish 2014-02-06 20:08:23

Cela fonctionne sur moi.

 str_replace(array("\r", "\n"), '&#10;', $textareavalue);
0
répondu Joel Enanod Jr 2016-03-30 02:09:29

De PHP en utilisant des guillemets simples pour le saut de ligne a fonctionné pour moi pour supporter les sauts de ligne quand je passe cette var à une zone de texte HTML value attribut

PHP

foreach ($videoUrls as $key => $value) {
  $textAreaValue .= $value->video_url . '\n';
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

HTML / JS

$( document ).ready(function() {
    var text = "<?= htmlspecialchars($textAreaValue); ?>";
    document.getElementById("video_urls_textarea").value = text;
});
0
répondu gnB 2016-07-11 20:56:28

Certaines mauvaises réponses sont affichées ici. au lieu de remplacer \n à <br />, ils sont le remplacement de <br /> à \n

Voici donc une bonne réponse pour stocker <br /> dans votre mysql lorsque vous avez entré dans textarea:

str_replace("\n", '<br />',  $textarea);
0
répondu Bashir Noori 2017-02-28 08:22:36

Ce que j'ai trouvé fonctionne dans le formulaire str_replace ('
', PHP_EOL, $ textarea);

0
répondu Mike 2017-06-18 12:28:39

Je ne suis pas sûr que ce soit possible mais vous devriez essayer <pre><textarea> ... </textarea></pre>

-1
répondu vdegenne 2011-06-25 21:34:27
<?php
$smarty = new Smarty;
$smarty->assign('test', "This is a \n Test");
$smarty->display('index.tpl');
?>

Dans l'index.tpl

{$test|nl2br}

En HTML

This is a<br />
test
-4
répondu Roberto Guzzo 2014-01-28 09:59:30