Zachowaj podziały wierszy z TextArea podczas pisania do MySQL

105

Używam obszaru tekstowego, aby umożliwić użytkownikom wprowadzanie komentarzy. Jeśli jednak użytkownicy wprowadzą nowe wiersze, nowe wiersze nie pojawią się po ich wyświetleniu. Czy istnieje sposób, aby przerwy w liniach pozostały.

Masz jakiś pomysł, jak zachować przerwy w liniach?

Hirvesh
źródło
Właśnie wyłączyłem htmlawed i wygląda na to, że nie ma to nic wspólnego z podziałami wierszy, podziały wierszy nadal się nie wyświetlają. Po prostu piszę dane textarea bezpośrednio do mysql i nie pojawiają się, gdy echo danych z bazy danych mysql.
Hirvesh
Przeglądałem również tabelę mysql za pomocą phpmyadmin i widziałem pole komentarza. Żadne tagi <br/> nie są przechowywane,
Hirvesh,
Robię system komentarzy w stylu Facebooka, więc nie chcę, żeby był wysiwyg. Nie ma pomysłów, dlaczego podziały linii nie zachowują się wtedy?
Hirvesh,

Odpowiedzi:

158

Dwa rozwiązania:

  1. Funkcja PHP nl2br():

    na przykład,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
  2. Opakuj dane wejściowe w <pre></pre>znaczniki.

    Zobacz: W3C Wiki - HTML / Elements / pre

superUntitled
źródło
2
+1, Właśnie przyznano uprzywilejowane miejsce w Moich Ulubionych dla PHP nl2br():)
Zuul
1
Myślę, że wybór i stylizacja <pre> </pre> jest dużo lepszy dla xss.
EGurelli
38

Oto czego używam

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

$inputTextto tekst zawarty w formularzu lub w obszarze tekstu. $textToStoreto zwracany tekst z nl2bri htmlentities, który ma być przechowywany w Twojej bazie danych. ENT_QUOTESprzekonwertuje zarówno podwójne, jak i pojedyncze cudzysłowy, więc nie będziesz mieć z nimi problemu.

hiroki
źródło
2
Uważam, że UTF-8 jest teraz domyślnym w PHP. Ale oczywiście nie zaszkodzi mówić wprost.
ProfileTwist
Jak ewentualnie wstawiać spacje między tekstami?
JWC maj
W bazie danych należy zawsze przechowywać surowe dane. Następnie przekonwertuj i wyczyść dane przed ich wyświetleniem.
Edward
3

Mam własną odpowiedź: użycie tej funkcji z danych z obszaru tekstowego rozwiązuje problem:

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

Więcej tutaj: http://php.net/nl2br

Hirvesh
źródło
2

Używam tego dwa etapy sposobu na zachowanie tego samego tekstu, który jest w textarea do sklepu w mysql i czasie coraz mogę też po prostu wyświetlania zwykłego tekstu .....

krok 1:

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

W zapytaniu wpisz $textToStore....

krok 2:

napisz kod dla zapytania wybierającego ... i bezpośrednie wartości echa ....

To działa

Jayendra Bariya
źródło
W bazie danych należy zawsze przechowywać surowe dane. Następnie przekonwertuj i wyczyść dane przed ich wyświetleniem.
Edward
1

To działa:

function getBreakText($t) {
    return strtr($t, array('\\r\\n' => '<br>', '\\r' => '<br>', '\\n' => '<br>'));
}
UbiQue
źródło
0
function breakit($t) {
    return nl2br(htmlentities($t, ENT_QUOTES, 'UTF-8'));
}

to może ci pomóc

przekazać tekstarea wal

Libin Thomas
źródło
-8

dlaczego sprawia, że ​​ludzie są tak trudni, skoro może to być takie proste :)

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

oczywiście będziesz potrzebować nagłówków i prawdopodobnie będziesz mieć więcej pól, ale to jest twój tekst

Duncan
źródło
6
Jest to niepewne i nie do końca związane z pytaniem.
Evan Darwin,
1
Po prostu spróbuj .... Prześlij na e-mail lub SQL .... Ziemniaki ..... Spróbuj uruchomić linie i rozwiązać problem ... Bez kilku, jeśli linie niechlujnego kodu, które czasami działają lub nie. .... :)
Duncan
Ze wszystkich odpowiedzi, ta jest najmniej zwięzła
JacobRossDev