2010-07-16 15 views
9

Estoy extrayendo contenido de un DB que se ha desinfectado utilizando mysql_real_escape_string. En consecuencia, los nuevos caracteres de línea ahora aparecen como "\ n". El problema es que este contenido se muestra a los usuarios dentro de una etiqueta pre> <, por lo que no puedo reemplazar \ n con < br />, por ejemplo.reemplazar n con el nuevo código de carácter de línea real

Supongo que podría reemplazar \ n con el código de caracteres utf8 real antes de insertar el resultado dentro del < pre>.

¿Hay alguien que esté buscando ayuda aquí? No usar mysql_real_escape_string no es realmente una opción debido a la política de seguridad.

Gracias.

+1

estoy un poco desconcertado, normalmente los datos deben ser devueltos sin escapar. La forma en que lo describes es como si los datos pasaran por mysql_real_escape_string() dos veces antes de ser almacenados –

+0

Parece que saneaste los datos escapándolos dos veces. Si coloca 'mysql_real_escape_string (" two \ nlines ");', habrá un carácter '\ n' real en la base de datos. Si obtiene datos, no debería haber necesidad de reemplazar '\ n' de nuevo. Si lo mantienes así, espera problemas con "y" también. – mvds

+0

tal vez seas víctima de la ridícula funcionalidad "magic_quote" en php: asegúrate de desactivarla, solo confunde a los que conocen el concepto de escape. – mvds

Respuesta

19
echo '<pre>'.str_replace('\n', "\n", $string).'</pre>'; 
+3

esto funcionaría como una solución rápida. La causa raíz es que los datos se escapen dos veces – Max

+0

Esto no funcionó hasta que usé comillas dobles '" \ n "' en lugar de comillas simples ''\ n'' por alguna razón. –

2
str_replace("\\n","\n",$data); 
-3

Esto podría ayudar un poco:

echo ('test \ NTest'); shows como

test test

pero echo ("test \ NTest"); muestra como

prueba

prueba

+1

echo (' test \ ntest '); debería aparecer como prueba \ ntest –

1

estoy tirando el contenido de una base de datos que ha sido desinfectada mediante mysql_real_escape_string. En consecuencia ahora los nuevos caracteres de línea aparecen como "\ n"

Si no has hecho nada a los datos en bruto se retiraron de la base de datos, entonces el ptoblem es que ha sido 'saneado' dos veces cuando se inserta.

C.

1

por qué no ...

echo str_replace('\\n', PHP_EOL, "few lines\nof text here,\nblah, blah! etc!"); 
Cuestiones relacionadas