Mantieni le interruzioni di riga da TextArea durante la scrittura su MySQL


105

Sto usando un'area di testo per consentire agli utenti di inserire commenti. Tuttavia, se gli utenti inseriscono nuove righe, le nuove righe non vengono visualizzate quando vengono emesse. C'è un modo per far rimanere le interruzioni di riga.

Qualche idea su come preservare le interruzioni di riga?


Ho appena disabilitato htmlawed e sembra che non abbia nulla a che fare con le interruzioni di riga, le interruzioni di riga ancora non vengono visualizzate. Quindi sto solo scrivendo i dati di textarea direttamente su mysql e non viene visualizzato quando echo i dati dal database mysql.
Hirvesh

Ho anche sfogliato la tabella mysql usando phpmyadmin e ho visto il campo dei commenti. Nessun <br/> tag viene memorizzato,
Hirvesh

Sto creando un sistema di commenti in stile Facebook, quindi non voglio che sia wysiwyg. Non hai idea del perché le interruzioni di riga non vengano conservate?
Hirvesh

Risposte:


158

Due soluzioni per questo:

  1. Funzione PHP nl2br():

    per esempio,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
    
  2. Racchiudi l'input in <pre></pre>tag.

    Vedi: W3C Wiki - HTML / Elements / pre


2
+1, Ho appena ricevuto un posto privilegiato nei miei preferiti per PHP nl2br():)
Zuul

1
Penso che la scelta e lo stile <pre> </pre> siano molto migliori per xss.
EGurelli

38

Ecco cosa uso

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

$inputTextè il testo fornito dal modulo o dalla textarea. $textToStoreè il testo restituito da nl2bre htmlentities, da memorizzare nel database. ENT_QUOTESconvertirà virgolette doppie e singole, quindi non avrai problemi con quelle.


2
Credo che UTF-8 sia ora l'impostazione predefinita in PHP. Ma ovviamente non fa male essere espliciti.
ProfileTwist

Come inserire eventuali spazi bianchi tra i testi?
JWC

Dovresti sempre memorizzare i dati grezzi nel database. Quindi converti e disinfetta i dati prima di visualizzarli.
Edward

3

Ho la mia risposta: l'utilizzo di questa funzione dai dati della textarea risolve il problema:

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

Maggiori informazioni qui: http://php.net/nl2br


2

Sto usando questi due passaggi del metodo per preservare lo stesso testo che si trova nella textarea per archiviarlo in mysql e in un momento posso anche semplicemente visualizzare il testo normale .....

passo 1:

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

Nella query inserisci $textToStore....

passo 2:

scrivere il codice per la query di selezione ... e i valori di eco diretti ....

Funziona


Dovresti sempre memorizzare i dati grezzi nel database. Quindi converti e disinfetta i dati prima di visualizzarli.
Edward

1

Funziona:

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

questo può aiutarti

passare la textarea wal


-8

perché creare persone così difficili quando può essere così facile :)

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

ovviamente avrai bisogno di intestazioni e probabilmente avrai più campi, ma questa è la tua area di testo da curare


6
Questo è insicuro e non del tutto pertinente alla domanda.
Evan Darwin

1
Provalo e basta .... Pubblica su e-mail o SQL .... Patate patate ..... Prova a eseguire le righe e risolvi il problema .... Senza un mucchio di righe di codice disordinato che a volte funziona o no .... :)
Duncan

Di tutte le risposte, questa è la meno concisa
JacobRossDev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.