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
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.
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.
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;
}
Vous pouvez utiliser le code suivant:
$course_description = nl2br($_POST["course_description"]);
$course_description = trim($course_description);
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"));
La manière simple:
-
Utilisez ceci pour insérer dans mysql:
$msg = $_GET['msgtextarea']; //or POST and my msg field format: text $msg = htmlspecialchars($msg, ENT_QUOTES);
-
Et utilisez ceci pour la sortie:
echo nl2br($br['msg']);
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('|', ' ', $r['db_field_name']);
Cela fonctionne sur moi.
str_replace(array("\r", "\n"), ' ', $textareavalue);
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;
});
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);
Ce que j'ai trouvé fonctionne dans le formulaire
str_replace ('
', PHP_EOL, $ textarea);
Je ne suis pas sûr que ce soit possible mais vous devriez essayer <pre><textarea> ... </textarea></pre>
<?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