Foros del Web » Programando para Internet » PHP »

<nobr> y nl2br();

Estas en el tema de <nobr> y nl2br(); en el foro de PHP en Foros del Web. Buenas gente, vereis tengo una dudilla y es que estoy haciendo un sistema de noticias en el cual quiero que el redactor pueda agregar codigo ...
  #1 (permalink)  
Antiguo 15/05/2010, 18:25
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
<nobr> y nl2br();

Buenas gente, vereis tengo una dudilla y es que estoy haciendo un sistema de noticias en el cual quiero que el redactor pueda agregar codigo HTML.

El problema es que al hacer tablas o cosas semejantes, la funcion nl2br me las destroza por completo al meter <br>.

He visto algun bbcode con etiqueta [nobr] (Imagino que filtrará y no dejará que actue dentro de la etiqueta la funcion nl2br o los eliminará al mostrarlos, en cualquier caso estoy algo perdido) y me gustaria saber si algun forero ha hecho algo parecido en algun proyecto.
  #2 (permalink)  
Antiguo 15/05/2010, 18:29
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: <nobr> y nl2br();

Código PHP:
Ver original
  1. $var = "contenido que tiene un <br /> o un <br> por ahí...";
  2. echo preg_replace("/(<br \/>|<br>)/", "", $var);
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 15/05/2010, 18:34
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: <nobr> y nl2br();

No me explique bien.

Quitar los BR sé pero, supongamos que tenemos algo semejante a esto:

ola
adios
[nobr]
ola
adios
ola
[/nobr]
adios

Hacemos el nl2br de ese texto y nos lo mostraria con BR, pero quiero quitar UNICAMENTE los que estan ENTRE [nobr]
  #4 (permalink)  
Antiguo 15/05/2010, 18:49
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: <nobr> y nl2br();

Código PHP:
Ver original
  1. $var = "Un par de <br /> afuera, [nobr] y un par de <br /><br> adentro [/nobr]un <br> por ahí...";
  2. $func = "str_replace(array('<br />','<br>'),'','$1')";
  3. echo preg_replace("/\[nobr\](.*?)\[\/nobr\]/e", $func, $var);
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 15/05/2010, 19:36
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: <nobr> y nl2br();

Funciona, muchas gracias.

Podrias explicarme un poco lo de $func?
  #6 (permalink)  
Antiguo 15/05/2010, 20:17
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: <nobr> y nl2br();

Si, claro...

Si entras a esta pág http://php.net/manual/es/reference.p....modifiers.php , y buscas e (PREG_REPLACE_EVAL), verás que sirve para que la cadena por la que se reemplazará, sea evaluada como código PHP, utilizando el valor devuelto de la función en este caso, y no la cadena misma que se pasó. Entonces, lo que hago, es escribir la función como un string normal, y luego el preg_replace lo evaluará como una función PHP.

.... No creo que lo haya explicado bien, la verdad no me entendí xD. Pero no es mas que pasarle una función php como string, y luego la evaluará como una función normal, ya que no puedes pasarle la función directamente.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #7 (permalink)  
Antiguo 15/05/2010, 20:33
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: <nobr> y nl2br();

Entendido, ya funciona a la perfeccion.

Para que funcione con variable multilinea simplemente hacemos un str_replace de \n por "" y ya está.

Muchas gracias.

Etiquetas: Ninguno
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




La zona horaria es GMT -6. Ahora son las 17:31.