Beibehalten von Zeilenumbrüchen aus TextArea beim Schreiben in MySQL


105

Ich verwende einen Textbereich, damit Benutzer Kommentare eingeben können. Wenn der Benutzer jedoch neue Zeilen eingibt, werden die neuen Zeilen bei der Ausgabe nicht angezeigt. Gibt es eine Möglichkeit, die Zeilenumbrüche beizubehalten?

Irgendeine Idee, wie man die Zeilenumbrüche bewahrt?


Ich habe gerade htmlawed deaktiviert und es scheint, dass es nichts mit Zeilenumbrüchen zu tun hat. Die Zeilenumbrüche werden immer noch nicht angezeigt. Ich schreibe also nur die Textbereichsdaten direkt in MySQL und sie werden nicht angezeigt, wenn ich Daten aus der MySQL-Datenbank wiedergebe.
Hirvesh

Ich habe auch die MySQL-Tabelle mit phpmyadmin durchsucht und das Kommentarfeld gesehen. Es werden keine <br/> Tags gespeichert,
Hirvesh

Ich mache ein Kommentarsystem im Facebook-Stil, also möchte ich nicht, dass es wysiwyg ist. Keine Ideen, warum Zeilenumbrüche dann nicht erhalten bleiben?
Hirvesh

Mögliches Duplikat des Eingabeformats
Giorgos Tsakonas

Antworten:


158

Zwei Lösungen dafür:

  1. PHP-Funktion nl2br():

    z.B,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
  2. Wickeln Sie die Eingabe in <pre></pre>Tags ein.

    Siehe: W3C Wiki - HTML / Elements / pre


2
+1, habe gerade einen privilegierten Platz in meinen Favoriten für PHP erhalten nl2br():)
Zuul

1
Ich denke, <pre> </ pre> viel besser für xss zu wählen und zu stylen.
EGurelli

38

Hier ist was ich benutze

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

$inputTextist der Text, der entweder vom Formular oder vom Textbereich bereitgestellt wird. $textToStoreist der zurückgegebene Text von nl2brund htmlentities, der in Ihrer Datenbank gespeichert werden soll. ENT_QUOTESkonvertiert sowohl doppelte als auch einfache Anführungszeichen, sodass Sie keine Probleme damit haben.


2
Ich glaube, UTF-8 ist jetzt die Standardeinstellung in PHP. Aber es tut natürlich nicht weh, explizit zu sein.
ProfileTwist

Wie füge ich möglicherweise Leerzeichen zwischen Texten ein?
JWC

Sie sollten Rohdaten immer in der Datenbank speichern. Konvertieren und bereinigen Sie dann die Daten, bevor Sie sie anzeigen.
Edward

3

Ich habe meine eigene Antwort erhalten: Die Verwendung dieser Funktion aus den Daten aus dem Textbereich löst das Problem:

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

Mehr hier: http://php.net/nl2br


2

Ich benutze diese beiden Methodenschritte, um den gleichen Text zu erhalten, der sich im Textbereich befindet, um ihn in MySQL zu speichern. Zu einem bestimmten Zeitpunkt kann ich auch einfach einfachen Text anzeigen.

Schritt 1:

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

In Abfrage eingeben $textToStore....

Schritt 2:

Schreiben Sie Code für ausgewählte Abfragen ... und direkte Echowerte ....

Es klappt


Sie sollten Rohdaten immer in der Datenbank speichern. Konvertieren und bereinigen Sie dann die Daten, bevor Sie sie anzeigen.
Edward

1

Das funktioniert:

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'));
}

das kann dir helfen

Übergeben Sie das Textfeld Wal


-8

Warum machen sooooo harte Leute, wenn es soooo einfach sein kann :)

//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);

Sie werden offensichtlich Überschriften benötigen und wahrscheinlich mehr Felder haben, aber dies ist Ihr Textbereich, um den Sie sich kümmern müssen


6
Dies ist unsicher und für die Frage nicht ganz relevant.
Evan Darwin

1
Probieren Sie es einfach aus ... Post an E-Mail oder SQL ... Kartoffelkartoffeln ... Versuchen Sie, die Zeilen auszuführen und das Problem zu beheben ... Ohne ein paar Zeilen unordentlichen Codes, die manchmal funktionieren oder nicht .... :)
Duncan

Von allen Antworten ist diese am wenigsten prägnant
JacobRossDev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.