Pregunta

Tengo un sistema configurado para que los usuarios envíen sus artículos a mi base de datos.Como será solo HTML, no quiero esperar que sepan escribir <br /> cada vez que hay una nueva línea, entonces estoy usando la función PHP nl2br() en la entrada.

También proporciono una herramienta de modificación de artículos, que devolverá sus artículos al formulario (sin embargo, esta es una página diferente) y les permitirá editarlos.Al hacer esto, el <br /> También aparecían elementos (aún con nuevas líneas).para remediar el
elementos que aparecen (que de todos modos esperaba) agregué preg_replace('/<br(\s+)?\/?>/i', "\n", mysql_result($result,$i,"content")) que había encontrado en otra pregunta en este sitio.Hace el trabajo de eliminar el <br /> elementos, pero como los está reemplazando con nuevas líneas, y las nuevas líneas se habrían mantenido originalmente de todos modos, cada vez que se edita la publicación, se agregarán más y más nuevas líneas, espaciando los párrafos cada vez más.Esto es algo que un usuario no entenderá.

Como ejemplo, digamos que ingreso lo siguiente en el formulario de envío del artículo:

 Hello, this is my article.
 I am demonstrating a new line here.

Esto se convertirá en:

Hello, this is my article.<br />
I am demonstrating a new line here.

Observe que, aunque se convirtió el carácter de nueva línea, todavía hay una nueva línea en el texto.En el formulario de edición, el <br /> se convertirá nuevamente en nueva línea y se verá así:

Hello, this is my article.

I am demonstrating a new line here.

Porque el <br /> se convirtió en una nueva línea, pero ya había una nueva línea.Así que supongo que lo que espero es que originalmente se convierta en algo como esto:

Hello, this is my article.<br />I am demonstrating a new line here.

Me pregunto ...¿Hay alguna manera de detener el nl2br() función de mantener las nuevas líneas originales?¿Podría tener que ver con Windows? \r\n ¿personaje?

¿Fue útil?

Solución

La función que estás usando, nl2br Se utiliza para insertarlos, pero no para reemplazarlos.Si quieres reemplazar \n con <br /> solo necesitas usar str_replace.Al igual que:

$string = str_replace("\n","<br />",$string);

No hay absolutamente ninguna necesidad de expresiones regulares en esta situación.

Otros consejos

Parece que el problema que describiste no es un error, sino una característica de bl2br.Podrías simplemente escribir tu propia función, como:

<?php
function NlToBr($inString)
{
    return preg_replace("%\n%", "<br>", $inString);
}
?>

Encontré este en los comentarios de la documentación de la función nl2br en el Manual de PHP: http://php.net/manual/de/function.nl2br.php.Si el que publiqué no te funcionó, debería haber muchos más en el lugar de donde vino.

(O simplemente use la función de la otra respuesta que se acaba de publicar, supongo que eso también debería funcionar)

Esto debería solucionarlo:

preg_replace('/<br(\s+)?\/?>(?!\s*\n)/i', "\n", mysql_result($result,$i,"content"))

No puedes simplemente eliminar los descansos, porque podrían estar en la misma línea.Esta expresión regular reemplazará todos los saltos con una nueva línea, pero no aquellos que van seguidos de una nueva línea.

Dejará el <br>\n en el texto.Una expresión regular adicional los eliminará:

preg_replace('/<br(\s+)?\/?>/i', "", $res)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top