Esto puede parecer un engaño, pero tenga la seguridad de que no lo es: he buscado en SO y en el resto de la web una respuesta a mi problema y terminé encontrando las mismas "soluciones" insuficientes una y otra vez. De todos modos, aquí va:
Estoy guardando la entrada del usuario de un área de texto a una base de datos MySQL (dentro de un entorno de WordPress, pero eso no debería importar a este problema, creo). Más tarde se recupera de la base de datos para mostrarse a los administradores en el back-end del sitio. El problema ocurre cuando los usuarios envían texto con saltos de línea (es decir, presionan la tecla Intro).
Una cadena de muestra podría verse así:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!
Greetings,
Bill
No hay caracteres de final de línea ("\ n", "\ r" o similares) en la cadena.
Lo estoy usando nl2br()
para generar salida HTML, pero eso no es suficiente. El resultado entonces es:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill
¿Cuál, hasta donde yo entiendo, es el nl2br()
resultado esperado , ya que eso inserta las etiquetas y no se supone que reemplace los saltos de línea en primer lugar?
Sin embargo, el formato que necesito sería este:
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill
Si la cadena tenía caracteres EOL como "\ n", la golpearía con o str_replace()
o preg_replace()
y terminaría, pero no tengo idea de qué aguja alimentar cualquiera de esas funciones si no hay caracteres allí en primer lugar.
Puedo acceder manualmente al campo relevante en la base de datos, presionar Retroceso para cada salto de línea y lo que más adelante quiero hacer con la cadena funciona. Entonces sé que necesito el formato anterior.
Respuestas:
Debería poder reemplazarlo con un preg que elimine todas las líneas nuevas y los retornos de carro. El codigo es:
Aunque los
\n
caracteres no aparecen, si obtiene retornos de carro, hay un carácter invisible allí. El preg reemplazar debería agarrarlos y arreglarlos.fuente
/\r|\n|\r\n/
La solución de Ben es aceptable, pero str_replace () es mucho más rápido que preg_replace ()
Usando menos potencia de CPU, reduce las emisiones mundiales de dióxido de carbono.
fuente
fuente
Es porque
nl2br()
no elimina líneas nuevas en absoluto.Use en su
str_replace
lugar:fuente
También puedes usar PHP trim
fuente
Para funcionar correctamente también en Windows, sugiero usar
"\r\n"
- para Windows,"\r"
- para Mac y"\n"
- para Linuxfuente
\r
y\n
se eliminan en la cadena, ¿por qué ese no sería el caso para aquellos que se siguen directamente?\r\n
en Windows y no funcionó en Linux.\r\n
FIRST ayudaría, ya que eso significa una coma en lugar de dos para cada parte si ese salto de línea\r\n
primero, luego reemplazamos\r
y\n
, he editado mi respuesta.\r
y\r
, no es necesario eliminarlo\r\n
, puedestr_replace(array("\r","\n"), "", $buffer);
obtener el mismo resultado.str_replace (PHP_EOL, nulo, $ str);
fuente
Algo un poco más funcional (fácil de usar en cualquier lugar):
¡Usar PHP_EOL como parámetro de reemplazo de búsqueda también es una buena idea! Prestigio.
fuente
Alternativa incorporada: trim ()
Está ahí para eliminar saltos de línea de diferentes tipos de archivos de texto, pero no maneja html.
fuente
Utilizo 3 líneas para hacer este trabajo, así que considera $ s como tu "material" ...
fuente