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?


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


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.


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


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


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

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

to może ci pomóc

przekazać tekstarea wal


-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("destination_email@whatever.com", "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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.