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?

Hirvesh
fuente
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

superUntitled
fuente
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.

hiroki
fuente
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

Hirvesh
fuente
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

Jayendra Bariya
fuente
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>'));
}
UbiQue
fuente
0
function breakit($t) {
    return nl2br(htmlentities($t, ENT_QUOTES, 'UTF-8'));
}

esto puede ayudarte

pasar el textarea wal

Libin Thomas
fuente
-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("[email protected]", "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

Duncan
fuente
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