Preserve quebras de linha de TextArea ao gravar em MySQL


105

Estou usando uma textarea para permitir que os usuários insiram comentários. No entanto, se os usuários inserirem novas linhas, as novas linhas não aparecerão quando forem impressas. Existe alguma maneira de fazer as quebras de linha ficarem.

Alguma ideia de como preservar as quebras de linha?


Acabei de desabilitar o htmlawed e parece que não tem nada a ver com quebras de linha, as quebras de linha ainda não aparecem. Então, estou apenas escrevendo os dados textarea diretamente no mysql, e eles não aparecem quando eu echo os dados do banco de dados mysql.
Hirvesh

Também pesquisei a tabela mysql usando phpmyadmin e vi o campo de comentário. Nenhuma etiqueta <br/> está sendo armazenada,
Hirvesh

Estou fazendo um sistema de comentários no estilo do Facebook, então realmente não quero que seja wysiwyg. Nenhuma ideia de por que as quebras de linha não preservam então?
Hirvesh

Respostas:


158

Duas soluções para isso:

  1. Função PHP nl2br():

    por exemplo,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
  2. Envolva a entrada em <pre></pre>tags.

    Veja: W3C Wiki - HTML / Elementos / pré


2
+1, acabei de receber um lugar privilegiado em meus favoritos para PHP nl2br():)
Zuul

1
Eu acho que escolher e estilizar <pre> </pre> muito melhor para xss.
EGurelli

38

Aqui está o que eu uso

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

$inputTexté o texto fornecido pelo formulário ou textarea. $textToStoreé o texto retornado de nl2bre htmlentities, para ser armazenado em seu banco de dados. ENT_QUOTESirá converter aspas simples e duplas, então você não terá problemas com elas.


2
Eu acredito que UTF-8 agora é o padrão em PHP. Mas é claro que não custa ser explícito.
ProfileTwist

Como inserir espaços em branco entre textos?
JWC de

Você deve sempre armazenar dados brutos no banco de dados. Em seguida, converta e higienize os dados antes de exibi-los.
Edward

3

Minha própria resposta: usar essa função dos dados da textarea resolve o problema:

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

Mais aqui: http://php.net/nl2br


2

Estou usando essas duas etapas de método para preservar o mesmo texto que está em textarea para armazenar no mysql e, em um momento futuro, também posso simplesmente exibir texto simples ...

passo 1:

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

Na consulta, digite $textToStore....

passo 2:

escreva o código para a consulta selecionada ... e os valores de eco direto ....

Funciona


Você deve sempre armazenar dados brutos no banco de dados. Em seguida, converta e higienize os dados antes de exibi-los.
Edward

1

Isso funciona:

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

isso pode te ajudar

passar a área de texto


-8

por que fazer pessoas são tãããão difíceis quando pode ser tããão fácil :)

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

você obviamente precisará de cabeçalhos e provavelmente terá mais campos, mas esta é a sua área de texto.


6
Isso é inseguro e não é muito relevante para a questão.
Evan Darwin

1
Apenas tente .... Poste por e-mail ou SQL .... Batata batata ..... Tente executar as linhas e corrigir o problema .... Sem um monte de linhas de código confuso que às vezes funciona ou não .... :)
Duncan

De todas as respostas, esta é a menos concisa
JacobRossDev
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.