Conservar saltos de línea de TextArea al escribir en MySQL


105

Estoy usando un área de texto para permitir que los usuarios ingresen comentarios. Sin embargo, si los usuarios ingresan nuevas líneas, las nuevas líneas no aparecen cuando se generan. ¿Hay alguna forma de mantener los saltos de línea?

¿Alguna idea de cómo conservar los saltos de línea?


Acabo de desactivar htmlawed y parece que no tiene nada que ver con los saltos de línea, los saltos de línea todavía no se muestran. Así que solo estoy escribiendo los datos del área de texto directamente en mysql, y no aparece cuando hago eco de los datos de la base de datos mysql.
Hirvesh

También examiné la tabla mysql usando phpmyadmin y vi el campo de comentarios. No se almacenan etiquetas <br/>
Hirvesh

Estoy haciendo un sistema de comentarios al estilo de Facebook, así que no quiero que sea wysiwyg. ¿No tienes idea de por qué los saltos de línea no se conservan entonces?
Hirvesh

Respuestas:


158

Dos soluciones para esto:

  1. Función PHP nl2br():

    p.ej,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
  2. Envuelva la entrada en <pre></pre>etiquetas.

    Ver: Wiki W3C - HTML / Elements / pre


2
+1, Acabo de recibir un lugar privilegiado en mis favoritos para PHP nl2br():)
Zuul

1
Creo que elegir y diseñar <pre> </pre> mucho mejor para xss.
EGurelli

38

Esto es lo que uso

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

$inputTextes el texto proporcionado por el formulario o el área de texto. $textToStorees el texto devuelto por nl2bry htmlentities, que se almacenará en su base de datos. ENT_QUOTESconvertirá comillas simples y dobles, por lo que no tendrá problemas con ellas.


2
Creo que UTF-8 es ahora el predeterminado en PHP. Pero, por supuesto, no está de más ser explícito.
ProfileTwist

¿Cómo insertar espacios en blanco entre textos?
JWC

Siempre debe almacenar los datos sin procesar en la base de datos. Luego convierta y desinfecte los datos antes de mostrarlos.
Edward

3

Tengo mi propia respuesta: usar esta función de los datos del área de texto resuelve el problema:

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

Más aquí: http://php.net/nl2br


2

Estoy usando estos dos pasos del método para preservar el mismo texto que está en textarea para almacenar en mysql y en un momento de obtención también puedo simplemente mostrar texto sin formato .....

paso 1:

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

En consulta ingrese $textToStore....

paso 2:

escribir código para la consulta de selección ... y valores de eco directo ...

Funciona


Siempre debe almacenar los datos sin procesar en la base de datos. Luego convierta y desinfecte los datos antes de mostrarlos.
Edward

1

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

esto puede ayudarte

pasar el textarea wal


-8

¿Por qué es tan difícil hacer gente cuando puede ser tan 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);

obviamente necesitará encabezados y probablemente tenga más campos, pero este es su área de texto de la que se ocupa


6
Esto es inseguro y no es muy relevante para la pregunta.
Evan Darwin

1
Solo pruébalo .... Publicar en correo electrónico o SQL .... Patatas patatas ... Tratar de ejecutar las líneas y solucionar el problema ... Sin un montón de líneas de código desordenado que a veces funciona o no .... :)
Duncan

De todas las respuestas, esta es la menos concisa
JacobRossDev
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.