Foros del Web » Programando para Internet » PHP »

Volver cambios que realiza NL2BR de nuevo. Problemas

Estas en el tema de Volver cambios que realiza NL2BR de nuevo. Problemas en el foro de PHP en Foros del Web. Hola chicos. pues uso nl2br para cambiar por <br /> los /nl saltos de linea de texto introducido en un formulario. Y luego una vez ...
  #1 (permalink)  
Antiguo 12/03/2008, 13:46
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Exclamación Volver cambios que realiza NL2BR de nuevo. Problemas

Hola chicos.

pues uso nl2br para cambiar por <br /> los /nl saltos de linea de texto introducido en un formulario.

Y luego una vez que quiero modificar estos datos, quiero escribirlos de nuevo en ese formulario... pero se cargan con el <br />

He probado esta funcion:

Código PHP:
function br2nl($text)
{
    return  
preg_replace('<br />'"\\n"$text);

Que encontré por ahí, modificada, y que se que EXÁCTAMTENTE tiene que salir <br />


pero sin embargo me escribe esto:

AÑLSJKDF<\n>
AJÑLSJKDF<\n>
AÑSDFJÑ<\n>
AÑSLKDJF<\n>
ASÑDLKFJÑ<\n>
ÑASKLDFJÑLK<\n>


cuando vuelvo.

O_O <\n> ?? por qué¿ Yo solo quiero que escriba los campos como estaban, pero no que salga esto. Qué hago mal?
__________________
Darkgaze
  #2 (permalink)  
Antiguo 12/03/2008, 13:49
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Re: Volver cambios que realiza NL2BR de nuevo. Problemas

Vale, He probado poniendo ereg_replace

pero ahora me pone \n y no lo escribe... lo muestra como texto. ¿Qué tiop de elemento es \n? no es html...no se que es, pero lo muestra como texto.
__________________
Darkgaze
  #3 (permalink)  
Antiguo 12/03/2008, 13:52
Avatar de eft0  
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 635
Antigüedad: 20 años, 10 meses
Puntos: 9
Re: Volver cambios que realiza NL2BR de nuevo. Problemas

Eso es por que reemplazas texto por texto.

Donde vuelves a mostrar el texto que te aparece con "\n"??. La ides es volver a mostrarlo en un ambiente que interprete HTML, sino, no utilizes la funcion nl2br()
  #4 (permalink)  
Antiguo 12/03/2008, 13:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: Volver cambios que realiza NL2BR de nuevo. Problemas

Prueba mejor usar: '\n' con comillas simples, al tu usar "\n" estas usando el caracter NEW_LINE.

Saludos.
  #5 (permalink)  
Antiguo 12/03/2008, 15:12
 
Fecha de Ingreso: agosto-2007
Mensajes: 345
Antigüedad: 16 años, 8 meses
Puntos: 21
Re: Volver cambios que realiza NL2BR de nuevo. Problemas

Seguramente lo que te comentare no te ayude a resolver este problema pero en el futuro quizás sea mas cómodo si en el momento de insertar los datos en la base de datos los insertas sin nl2br. Y en el momento de mostrarlos utilizas nl2br. Cuando tengas que poner los datos en un formulario para que los modifiquen saldran tal y como los insertaron, es decir, respetando los saltos de linea. En este ultimo paso pones los datos sin nl2br.

Si no me explique te lo muestro con un ejemplo.

INSERTAR DATOS
Código PHP:
funcion_inserta_datos($nombre,$texto_largo); 
MUESTRAS DATOS
Código PHP:
echo nl2br($texto_largo); 
MUESTRAS DATOS EN UN FORMULARIO
Código PHP:
<textarea> echo $texto_largo </textarea

  #6 (permalink)  
Antiguo 12/03/2008, 15:29
 
Fecha de Ingreso: marzo-2008
Ubicación: Buenos Aires
Mensajes: 86
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Volver cambios que realiza NL2BR de nuevo. Problemas

El primer parámetro de preg_replace es una expresión regular.
La expresion regular deberia estar escrita asi por ejemplo:

'#<br \/>#'

Con un caracter como delimitador (en este caso usé #) y no estoy seguro pero la / creo que debe escaparse con \ .

Luego el segundo parametro es la cadena con la que vas a reemplazar. Si lo que quieres es volver a insertar el salto de linea, usa comillas dobles (como ya lo tienes) y una sola barra. Sino te pone el texto \n que no es lo mismo.

O sea que quedaría asi:

Código PHP:
return  preg_replace('#<br \/>#'"\n"$text); 
-ronnieb
  #7 (permalink)  
Antiguo 12/03/2008, 15:59
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Re: Volver cambios que realiza NL2BR de nuevo. Problemas

buena idea lo de '\n'...

De todas formas lo que más me extraña es que ... si pongo el replace por "", (Vacio), sale bien, parrafeado y todo!... O_O... pero no puede serporuqe en la bbdd se ha guardado con <br /> !!.

Es curioso...

Ahora no puedo probar todo esto que me decís, pero buena idea.


nx00 -> lo que pasa es que lo hice así al principio, y son casi 200 campos en el formulario... es un rollo escribir nl2br cada vez...


xD


...prefiero cambiar pocas cositas ahora, que tengo cierta urgencia. Pero muchas gracias a todos.
__________________
Darkgaze
  #8 (permalink)  
Antiguo 16/03/2008, 21:28
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Volver cambios que realiza NL2BR de nuevo. Problemas

Cita:
Iniciado por darkgaze Ver Mensaje
De todas formas lo que más me extraña es que ... si pongo el replace por "", (Vacio), sale bien, parrafeado y todo!... O_O... pero no puede serporuqe en la bbdd se ha guardado con <br /> !!.

Es curioso...
Si puede ser, y por eso funciona

Verás, la función nl2br() agrega un <br /> cada vez que encuentra un caracter de salto de línea "\n", pero, luego de ejecutarla, el caracter de salto de linea sigue ahí.

Tenemos:

Código PHP:
echo "Texto, y más texto,\notra linea de texto"
que imprime
Código:
Texto, y más texto,
otra línea de texto
Al aplicar la función nl2br() a esa cadena, obtenemos esto:
Código:
Texto, y más texto,<br />
otra línea de texto
que sería lo mismo que:
Código PHP:
echo "Texto, y más texto,<br />\notra línea de texto"
Dicho esto, no debe extrañar que al eliminar los tags <br /> sigan permaneciendo los saltos de línea originales \n.

El propio manual lo dice:

Cita:
Iniciado por php.net/nl2br
nl2br — Inserta saltos de línea de HTML antes de cada salto de línea de la cadena
Y para terminar, aquí tienes una pequeña función para borrar los saltos de línea creados con nl2br():
Código PHP:
function br2nl($texto) {
    return 
preg_replace('/<br\s*\/?>/i'''$texto);
}
 
# Uso
$var nl2br("Texto\nmás texto");
echo 
br2nl($var); 
Saludos,
  #9 (permalink)  
Antiguo 17/03/2008, 03:38
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Re: Volver cambios que realiza NL2BR de nuevo. Problemas

jo. Muchísimas gracias por esta respuseta tan elaborada, de verdad :)

Gracias

Ya lo entiendo.
__________________
Darkgaze
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:27.