Foros del Web » Programando para Internet » PHP »

Expresión regular en PHP

Estas en el tema de Expresión regular en PHP en el foro de PHP en Foros del Web. Hola! Tengo un acertijo que no he podido resolver! Si por ejemplo: 1 - En la variable $msj se almacenan los datos que el usuario ...
  #1 (permalink)  
Antiguo 29/04/2011, 13:26
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 8 años, 7 meses
Puntos: 236
Expresión regular en PHP

Hola!
Tengo un acertijo que no he podido resolver!

Si por ejemplo:
1 - En la variable $msj se almacenan los datos que el usuario escribió junto con etiquetas.
2 - No puede haber ningúna etiqueta distinta a estas: <queso>, <puré>, <pizza>.

¿Como puedo usar la expresión regular para que elimine toda etiqueta que no sea ningúna a las mencionadas?

Básicamente no debe haber ningún contenido dentro de <> que sea distinto a lo anterior.

He intentado algo como esto:
$filtro='/<(([^q][^u][^e][^s][^o])|([^p][^u][^r][^é])|([^p][^i][^z][^z][^a]))>/i';
$msj=preg_replace($filtro,'',$msj);

Si funcioná pero cuando hay una palabra con más carácteres que las excepciones no lo borra.
Ejemplo
La etiqueta <queso con papas> tiene más carácteres que <queso>, <puré>o <pizza> entonces no se elimina. No entiendo muy bien el por que, pero lo que hize fué agregar al filtro antes de >/i';
es lo siguiente:
([^>]+)?
que significa que tal véz hay más de un carácter después del filtro anterior y distinto a ">" ya que es el carácter final de la etiqueta y debe saber dónde terminar.
Pero no funciona bien por que elimina otras cosas que no debería y no se muy bien porque.
El propósito de saber hacer esto es que hize un editor de texto con HTML en tiempo real(por así decirlo), que cuándo se envié se filtre todo el HTML que no sea admitido por que no quiero que metan estilos que no se permiten o funciones javascript.
Por ejemplo:
No quiero <input type="submit" value="Aceptar" /> o un <div style="position:absolute">Soy libre!!!</div>, etc, etc. Ya que todo esto se puede meter desde la barra de dirección web.

Por último cabe mencionar que el filtro como lo escribi arriba si suele funcionar aparentemente bien pero las etiquetas de cierre también las elimina ejemplo:
<queso>Hola me llamo Pancho Villa y juego Gears 3 Beta</queso><etiqueta no admitida>
después del filtro queda así:
<queso>Hola me llamo Pancho Villa y juego Gears 3 Beta
y yo quiero esto
<queso>Hola me llamo Pancho Villa y juego Gears 3 Beta</queso>

Espero y me haya entendido un 70% y que puedan encontrar una solución jeje Saludos y Gracias por responder!!

=D
  #2 (permalink)  
Antiguo 29/04/2011, 14:10
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 9 años, 3 meses
Puntos: 202
Respuesta: Expresión regular en PHP

Esta es la tercera tarea que veo en el foro hoy.
Jajaja este foro está decayendo, ahora es para resolver "acertijos" de clase.

Un consejo, tu planteamiento eso es una locura. Dale un ojito al manual.
Otra cosa, con semejante explicación nadie te va a leer, yo sólo leí el princpio.

No sé para que quieres usar expresiones regulares cuando sólo necesitas un array y un str_replace.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #3 (permalink)  
Antiguo 29/04/2011, 15:16
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 8 años, 7 meses
Puntos: 236
Respuesta: Expresión regular en PHP

Cita:
Iniciado por IEKK Ver Mensaje
Esta es la tercera tarea que veo en el foro hoy.
Jajaja este foro está decayendo, ahora es para resolver "acertijos" de clase.

Un consejo, tu planteamiento eso es una locura. Dale un ojito al manual.
Otra cosa, con semejante explicación nadie te va a leer, yo sólo leí el princpio.

No sé para que quieres usar expresiones regulares cuando sólo necesitas un array y un str_replace.
Hola!
Lo que sucéde es que mi problema es algo especial por eso pongo varios ejemplos.
Mira no puedo usar un array por que las etiquetas pueden ser un millon ej: <asfih></asfih><idsnfl></idsnfl><ppaw /><mml i="dbb;aa"></mml>.
Lo único que quiero es que las etiquetas que no sean igual a las que permito, se eliminen completamente.
  #4 (permalink)  
Antiguo 29/04/2011, 15:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 11 años, 8 meses
Puntos: 2534
Respuesta: Expresión regular en PHP

Vamos a imaginar que todas las etiquetas que deseas -o no- se basan en XML, ¿cierto?

Entonces podrías utilizar strip_tags(), revisa el manual:
http://php.net/strip_tags

Solo así puedes especificar que etiquetas permitir, y eliminar el resto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 29/04/2011, 15:45
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 8 años, 7 meses
Puntos: 236
Respuesta: Expresión regular en PHP

Cita:
Iniciado por pateketrueke Ver Mensaje
Vamos a imaginar que todas las etiquetas que deseas -o no- se basan en XML, ¿cierto?

Entonces podrías utilizar strip_tags(), revisa el manual:
[url]http://php.net/strip_tags[/url]

Solo así puedes especificar que etiquetas permitir, y eliminar el resto.
Eso! Gracias man, esta función es muy útil, visito regularmente php.net pero son tantas tantas funciones que es dificil encontrar algo así.
Bueno ya me solucionaste mi problema tu si sabes!
Gracias!

Etiquetas: regular
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 13:11.