web-dev-qa-db-fra.com

sauts de ligne dans une zone de texte

Je sais que lorsque vous enregistrez une zone de texte, vous pouvez utiliser nl2br () ou str_replace pour remplacer les balises/n par les balises br, etc. Je n'arrive pas à trouver grand chose à propos de la réintégration des données dans une zone de texte contenant ces sauts de ligne.

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

foo
bar
baz

Lorsque cela est enregistré dans la base de données, il sera enregistré comme suit:

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

Désormais, lorsque cet utilisateur revient à ce formulaire après une actualisation de page, tous les champs sont automatiquement renseignés avec leurs données précédentes en extrayant 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 des sauts de ligne. J'ai aussi essayé de changer les balises br en/n en espérant que textarea les interprète 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 ce que cela peut être fait? Ou plus important peut-il être fait en utilisant HTML/PHP (im using smarty). Si ce n'est pas possible, peut-on utiliser javascript?

Des exemples seraient appréciés.

merci d'avoir lu

31
fl3x7

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 stocker aucun formatage HTML dans la base de données (sauf si vous utilisez également un éditeur HTML riche, auquel cas il serait ridicule de ne pas le faire).

Une nouvelle ligne \n deviendra simplement une nouvelle ligne dans la zone de texte.

64
Halcyon

Vous pouvez utiliser str_replace pour remplacer les balises <br /> par des 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 appeler au préalable nl2br. De cette façon, les sauts de ligne resteraient. Lorsque vous affichez en HTML, appelez nl2br. Un autre avantage de cette approche est qu’elle nécessiterait moins d’espace de stockage dans votre base de données, car un saut de ligne correspond à 1 caractère, par opposition à "<br />" qui correspond à 6.

26
Francois Deschenes

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;
}
22
Nizam Kazi

Vous pouvez utiliser le code suivant:

$course_description = nl2br($_POST["course_description"]);
$course_description = trim($course_description);
6
rahul

Ma recommandation est de sauvegarder les données dans la base de données avec les sauts de ligne au lieu de les analyser avec nl2br. Vous devez utiliser nl2br en sortie non 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
Ryan Casas

Certaines mauvaises réponses sont affichées ici . Au lieu de remplacer \n par <br />, elles remplacent <br /> par \n

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

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

Ce que j'ai trouvé fonctionne sous la forme est Str_replace ('& lt; br & gt;', PHP_EOL, $ textarea);

0
Mike

De PHP avec des guillemets simples pour le saut de ligne m'a permis de prendre en charge les sauts de ligne lorsque je transmettais 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
Gene Bo

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

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

Côté PHP: PHP chaîne en chaîne TextArea:

$list = str_replace('|', '&#13;&#10;', $r['db_field_name']);
0
gibberish

Cela fonctionne sur moi.

 str_replace(array("\r", "\n"), '&#10;', $textareavalue);
0
Joel Enanod Jr