120 votes

Conserver les sauts de ligne de TextArea lors de l'écriture vers MySQL

J'utilise une zone de texte pour permettre aux utilisateurs de saisir des commentaires. Cependant, si l'utilisateur saisit de nouvelles lignes, celles-ci n'apparaissent pas à la sortie. Existe-t-il un moyen de faire en sorte que les sauts de ligne soient conservés ?

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

0 votes

Je viens de désactiver htmlawed, et il semble que cela n'ait rien à voir avec les sauts de ligne, ceux-ci n'apparaissent toujours pas. J'écris donc les données du textarea directement dans mysql, et elles ne s'affichent pas lorsque je renvoie les données de la base mysql.

0 votes

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

0 votes

Je fais un système de commentaires à la Facebook, donc je ne veux pas vraiment que ce soit du wysiwyg. Aucune idée de la raison pour laquelle les sauts de ligne ne sont pas conservés alors ?

170voto

superUntitled Points 8085

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 <pre></pre> tags.

    Voir : Wiki W3C - HTML/Eléments/pre

3 votes

+1, Vient d'obtenir une place privilégiée dans mes favoris pour PHP nl2br() :)

1 votes

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

42voto

hiroki Points 161

Voici ce que j'utilise

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

$inputText est le texte fourni par le formulaire ou la zone de texte. $textToStore est le texte renvoyé par nl2br et htmlentities pour être stocké dans votre base de données. ENT_QUOTES convertira les guillemets simples et doubles, ce qui vous évitera tout problème.

2 votes

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

0 votes

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

1 votes

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

3voto

the_archer Points 1551

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 d'informations ici : http://php.net/nl2br

1voto

J'utilise ces deux méthodes pour préserver le même texte qui se trouve dans la base de données de l'UE. textarea pour stocker dans mysql et à un moment donné, je peux aussi simplement afficher le 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 select...et les valeurs directes d'écho....

Cela fonctionne

0 votes

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

-8voto

Duncan Points 7

Pourquoi rendre les choses si difficiles quand elles peuvent être si faciles :)

//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 textarea qui s'en occupe

6 votes

C'est peu sûr et pas tout à fait pertinent pour la question.

1 votes

Essayez-le simplement.... Post to email or 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 désordonné qui fonctionne parfois ou pas.... :)

0 votes

De toutes les réponses, celle-ci est la moins concise.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X