Foros del Web » Programando para Internet » PHP »

StripTags avanzado/personalizado

Estas en el tema de StripTags avanzado/personalizado en el foro de PHP en Foros del Web. Hola!!! Otra vez, y como siempre que me trabo :/, vuelvo por estos lados que siempre me solucionan los problemas.. Esta vez, estoy tratando de ...
  #1 (permalink)  
Antiguo 10/07/2013, 23:33
Avatar de raulalva3  
Fecha de Ingreso: julio-2005
Ubicación: San Juan - Argentina
Mensajes: 44
Antigüedad: 19 años, 4 meses
Puntos: 0
Mensaje StripTags avanzado/personalizado

Hola!!!
Otra vez, y como siempre que me trabo :/, vuelvo por estos lados que siempre me solucionan los problemas..
Esta vez, estoy tratando de hacer una especie de strip_tags avanzado o personalizado ya que el strip_tags de PHP no me sirve al todo para lo que necesito.
Este es mi ejemplo:
Código PHP:
Ver original
  1. $sting='<p style="color:black">
  2. Texto de <b>prueba</b> con una <a href="http://www.google.com" onclick="javascript()">imagen</a> en su cuerpo.
  3. <img src="imagen.jpg" width="50" height="50" class="clase" />
  4. </p>';
Resulta que hay etiquetas, de las cuales necesito conservar ciertos atributos y no elimarlas por completo. Sacar los style, class,onclick, por ejemplo.
Es decir, necesito que me quede algo como:
Código PHP:
Ver original
  1. $sting='<p>Texto de <b>prueba</b> con una <a href="http://www.google.com">imagen</a> en su cuerpo.<img src="imagen.jpg" width="50" height="50"/></p>';
Llevo una semana con este tema pero aun no lo puedo sacar y no me da para más la cabeza :S.
Mi intención en primer momento era usar expresiones regulares para esto, pero como no las se manejar bien, me pierdo en las complicaciones de lo que necesito.
En una primera instancia intenté empezar especificando como inicio un array con cada etiqueta y los atributos permitidos para cada una de la siguiente forma:
Código PHP:
Ver original
  1. $permitir = array(
  2.     'p' => '',
  3.     'a' => 'href',
  4.     'img' => 'src|width|height',
  5. )
En este caso, seria, no permitir ningún atributo para la etiqueta <p> y permitir los especificados en cada uno de los siguientes elementos (no se si me explico bien).
Pero lamentablemente, aun no puedo hacerlo funcionar y ya estoy de los pelos con este tema.
Me cansé de buscar alguien que tuviera la misma necesidad que yo, pero no encuentro por ningún lado.
Alguna sugerencia?
Saludos y de ante mano, gracias!
  #2 (permalink)  
Antiguo 11/07/2013, 01:09
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: StripTags avanzado/personalizado

No debes definir los que quieres sacar y los que no... si haces asi habra un tercer grupo que no estas considerando que serian los que no especificastes. Este error lo cometieron al escribir algunas librerias que he visto.

Cita:
string strip_tags ( string $str [, string $allowable_tags ] )
Entonces, quedamos que el primer p=>'' ya no va mas

Te recomiendo uses SimpleXML a usar expresiones regulares para parsear los tags con esos atributos.
__________________
Salu2!
  #3 (permalink)  
Antiguo 11/07/2013, 01:10
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: StripTags avanzado/personalizado

Esto lo solucionamos con una expresión regular, mañana te enseño como que ya caigo de sueño, saludos !!!
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #4 (permalink)  
Antiguo 11/07/2013, 07:53
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: StripTags avanzado/personalizado

Cita:
Iniciado por Reedyseth Ver Mensaje
Esto lo solucionamos con una expresión regular, mañana te enseño como que ya caigo de sueño, saludos !!!
Claro se puede ...

Código PHP:
Ver original
  1. <?php
  2.  
  3. $html = <<<HTML
  4. <html>
  5. <head></head>
  6. <body>
  7. <h1>Probando REGEX</h1>
  8. <INPUT name="data[Hiring][name]" type="text" maxlength="255" value="525" id="HiringName" class="alguna" />
  9. <input name="otra_cosa" style="" >
  10. </body>
  11. HTML;
  12.  
  13. $patt = '/<[a-z][^>]*(?:\/)?>/i';
  14. preg_match_all($patt,$html,$array_resul);
  15.  
  16. var_dump($array_resul);

Dentro del array de Tags puedes buscar las propiedades y si debes eliminar ese tag haces un str_replace() sobre esa cadena con el sistituto del tag sin propiedades

Ya con LA EXPRESION COMPLETA pues todo el programa serian como 3 o 4 lineas de codigo nomas porque haces uso de preg_match_replace() pero a mi me parece que no siempre hay que romperse el coco con Regex... PHP te puede ayudar a procesar a partir de una regex no tan completita
__________________
Salu2!

Última edición por Italico76; 11/07/2013 a las 08:31
  #5 (permalink)  
Antiguo 11/07/2013, 08:41
Avatar de Reedyseth  
Fecha de Ingreso: enero-2009
Ubicación: Chihuahua, México
Mensajes: 419
Antigüedad: 15 años, 9 meses
Puntos: 36
Respuesta: StripTags avanzado/personalizado

Andale con eso jejeje, ya nada mas que @raulalva3 lo personalize y lo configure con lo que quiera quitar y poner :D
__________________
Reedyseth
Te ayudo? No olvides dar un +
blog:http://behstant.com/blog
En el blog:Tutoriales de Desarrollo Web PHP, Javascript, BD y más.
  #6 (permalink)  
Antiguo 11/07/2013, 14:19
Avatar de raulalva3  
Fecha de Ingreso: julio-2005
Ubicación: San Juan - Argentina
Mensajes: 44
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: StripTags avanzado/personalizado

Muchas gracias Italico76, pero aún no entiendo muy bien que debo hacer con esto.. es decir.. yo ya logré algo parecido, el tema es, cómo reemplazo ahora los tags en el texto completo?
  #7 (permalink)  
Antiguo 11/07/2013, 14:59
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: StripTags avanzado/personalizado

Cita:
Iniciado por raulalva3 Ver Mensaje
Muchas gracias Italico76, pero aún no entiendo muy bien que debo hacer con esto.. es decir.. yo ya logré algo parecido, el tema es, cómo reemplazo ahora los tags en el texto completo?
Vale, puedes usar preg_reclace_callback()

http://www.php.net/manual/es/functio...e-callback.php

Como ?

Pues digamos adaptas esa expresion que recoje TODOS los tags html de apertura para recoja los de un tipo ejemplo IMG o DIV etc, entonces llamas a una funcion personalizada enlazada con funcion preg_replace_callback() que chequee si se cumplen las condiciones y haga los reemplazos.

Si encapsulas todo dentro de una clase podrias hacer que la funcion callable acceda a variables internas (atributos de la clase) para saber que debe hacer.
__________________
Salu2!

Última edición por Italico76; 11/07/2013 a las 15:53
  #8 (permalink)  
Antiguo 11/07/2013, 16:10
Avatar de raulalva3  
Fecha de Ingreso: julio-2005
Ubicación: San Juan - Argentina
Mensajes: 44
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: StripTags avanzado/personalizado

gracias, voy a intentar a ver que me sale :)

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 12:17.