Préserver les sauts de ligne de TextArea lors de l'écriture sur MySQL


105

J'utilise une zone de texte pour permettre aux utilisateurs de saisir des commentaires. Cependant, si les utilisateurs saisissent de nouvelles lignes, les nouvelles lignes n'apparaissent pas lors de leur sortie. Existe-t-il un moyen de faire en sorte que les sauts de ligne restent.

Une idée comment préserver les sauts de ligne?


Je viens de désactiver htmlawed, et il semble que cela n'a rien à voir avec les sauts de ligne, les sauts de ligne ne s'affichent toujours pas. Donc, j'écris simplement les données textarea directement sur mysql, et elles ne s'affichent pas lorsque j'écho des données de la base de données mysql.
Hirvesh

J'ai également parcouru la table mysql en utilisant phpmyadmin et vu le champ de commentaire. Aucune balise <br/> n'est stockée,
Hirvesh

Je fais un système de commentaires de style Facebook, donc je ne veux pas vraiment que ce soit wysiwyg. Aucune idée pourquoi les sauts de ligne ne se conservent pas alors?
Hirvesh

Réponses:


158

Deux solutions pour cela:

  1. Fonction PHP nl2br():

    par exemple,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
  2. Enveloppez l'entrée dans des <pre></pre>balises.

    Voir: Wiki W3C - HTML / Elements / pre


2
+1, Je viens de recevoir une place privilégiée sur mes favoris pour PHP nl2br():)
Zuul

1
Je pense que choisir et styliser <pre> </pre> beaucoup mieux pour xss.
EGurelli

38

Voici ce que j'utilise

$textToStore = nl2br(htmlentities($inputText, ENT_QUOTES, 'UTF-8'));

$inputTextest le texte fourni par le formulaire ou textarea. $textToStoreest le texte renvoyé par nl2bret htmlentities, à stocker dans votre base de données. ENT_QUOTESconvertira les guillemets doubles et simples, vous n'aurez donc aucun problème avec ceux-ci.


2
Je crois que UTF-8 est maintenant la valeur par défaut de PHP. Mais bien sûr, cela ne fait pas de mal d'être explicite.
ProfileTwist

Comment éventuellement insérer des espaces blancs entre les textes?
JWC mai

Vous devez toujours stocker les données brutes dans la base de données. Ensuite, convertissez et nettoyez les données avant de les afficher.
Edward

3

J'ai ma propre réponse: l'utilisation de cette fonction à partir des données de la zone de texte résout le problème:

function mynl2br($text) { 
   return strtr($text, array("\r\n" => '<br />', "\r" => '<br />', "\n" => '<br />')); 
} 

Plus ici: http://php.net/nl2br


2

J'utilise ces deux étapes de la méthode pour conserver le même texte qui est dans textarea pour stocker dans mysql et à un moment où je peux aussi simplement afficher du texte brut .....

étape 1:

$status=$_POST['status'];<br/>
$textToStore = nl2br(htmlentities($status, ENT_QUOTES, 'UTF-8'));

Dans la requête, entrez $textToStore....

étape 2:

écrire le code pour la requête de sélection ... et les valeurs d'écho directes ....

Ça marche


Vous devez toujours stocker les données brutes dans la base de données. Ensuite, convertissez et nettoyez les données avant de les afficher.
Edward

1

Cela marche:

function getBreakText($t) {
    return strtr($t, array('\\r\\n' => '<br>', '\\r' => '<br>', '\\n' => '<br>'));
}

0
function breakit($t) {
    return nl2br(htmlentities($t, ENT_QUOTES, 'UTF-8'));
}

cela peut vous aider

passer le textarea wal


-8

pourquoi rendre les gens tellement durs alors que ça peut être tellement facile :)

//here is the pull from the form
$your_form_text = $_POST['your_form_text'];


//line 1 fixes the line breaks - line 2 the slashes
$your_form_text = nl2br($your_form_text);
$your_form_text = stripslashes($your_form_text);

//email away
$message = "Comments: $your_form_text";
mail("destination_email@whatever.com", "Website Form Submission", $message, $headers);

vous aurez évidemment besoin d'en-têtes et aurez probablement plus de champs, mais c'est votre zone de texte qui prend soin de


6
Ce n'est pas sûr et pas tout à fait pertinent par rapport à la question.
Evan Darwin

1
Essayez-le ... Publiez dans un e-mail ou SQL .... Pommes de terre pommes de terre ..... Essayez d'exécuter les lignes et résolvez le problème .... Sans un tas de lignes de code en désordre qui fonctionnent parfois ou ne .... :)
Duncan

Parmi toutes les réponses, celle-ci est la moins concise
JacobRossDev
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.