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?

Hirvesh
quelle
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

superUntitled
quelle
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.

Hiroki
quelle
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

Hirvesh
quelle
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

Jayendra Bariya
quelle
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>'));
}
UbiQue
quelle
0
function breakit($t) {
    return nl2br(htmlentities($t, ENT_QUOTES, 'UTF-8'));
}

das kann dir helfen

Übergeben Sie das Textfeld Wal

Libin Thomas
quelle
-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("[email protected]", "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

Duncan
quelle
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