Foros del Web » Programando para Internet » PHP »

Quitar etiqueta script - expresiones regulares

Estas en el tema de Quitar etiqueta script - expresiones regulares en el foro de PHP en Foros del Web. Hola, Estoy aprendiendo sobre expresiones regulares, necesito quitar todas las etiquetas script (y lo que llevan dentro) de un documento, probando he hecho: Código PHP: ...
  #1 (permalink)  
Antiguo 22/09/2008, 11:04
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 17 años
Puntos: 4
Pregunta Quitar etiqueta script - expresiones regulares

Hola,


Estoy aprendiendo sobre expresiones regulares, necesito quitar todas las etiquetas script (y lo que llevan dentro) de un documento, probando he hecho:

Código PHP:
$texto ereg_replace("<script(.*)<\/script>",'',$texto);
//quita desde que encuentra en el documento: <script hasta </script> llevándose todo lo que haya en medio (otras tags)

$texto ereg_replace("<script([^>]*)>",'',$texto);
//Pero sólo elimina <script...>

$texto ereg_replace("<script([^<\/script>]*)<\/script>",'',$texto);
//No borra nada 
Y otras cuantas más, que no funcionan. Podría alguien ayudarme?

Gracias

____

modifico:


Código PHP:
$texto ereg_replace("<script([^>]*)>([^<]*)<\/script>",'',$texto);
//este funciona bien, pero seguro que se puede mejorar 
//si hubiera dentro del script: <![CDATA]> por ejemplo, ya no vale 
__________________
JoniJnm.es

Última edición por JoniJnm; 22/09/2008 a las 11:23
  #2 (permalink)  
Antiguo 22/09/2008, 11:12
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Quitar etiqueta script - expresiones regulares

Disculpa mi pregunta, pero... por qué razón necesitas hacer algo así?

Saludos!!!
  #3 (permalink)  
Antiguo 22/09/2008, 11:13
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 17 años
Puntos: 4
Respuesta: Quitar etiqueta script - expresiones regulares

Personal :)

Necesito poner [^<\/script>]

es decir, que no sea: </script>, pero no funcionaaa, tampoco: [^(<\/script>)]
__________________
JoniJnm.es
  #4 (permalink)  
Antiguo 22/09/2008, 11:24
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Quitar etiqueta script - expresiones regulares

Lo que necesitás es
Código PHP:
$texto ereg_replace("<script(.*?)<\/script>",'',$texto); 
el ? extra al lado del * es para que tome la mínima coincidencia posible.


Saludos.
  #5 (permalink)  
Antiguo 22/09/2008, 11:26
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 17 años
Puntos: 4
Respuesta: Quitar etiqueta script - expresiones regulares

Hola, muchas gracias por responder.

Lo he probado y borra toda la variable $texto o no hace nada

Código PHP:
<?php
$texto 
'<div id="prueba"></div>
<!-- prueba -->

<script type=\'text/javascript\'>aaaa </script>
<div style=\'display:none\'><script type=\'text/javascript\'>aaa</script></div>
<script type=\'text/javascript\'>aaaa</script> 

<br>
<div>aaa
'
;

 
$texto ereg_replace("<script(.*\?)<\/script>",'',$texto);  

print 
str_replace("\n","<br>",htmlentities($texto));

?>
Imprime
Cita:
<div id="prueba"></div>
<!-- prueba -->

<script type='text/javascript'>aaaa </script>
<div style='display:none'><script type='text/javascript'>aaa</script></div>
<script type='text/javascript'>aaaa</script>

<br>
<div>aaa
__________________
JoniJnm.es

Última edición por JoniJnm; 22/09/2008 a las 11:34
  #6 (permalink)  
Antiguo 22/09/2008, 18:56
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 17 años
Puntos: 4
Pregunta Respuesta: Quitar etiqueta script - expresiones regulares

Se puede poner en una expresión lo siguiente?

$texto = ereg_replace("<script(todoloquesea)</script>",'',$texto);

es decir, desde <script hasta el 1º </script> que vea

Es que si pongo:

$texto = ereg_replace("<script(.*)</script>",'',$texto);


Quita desde <script hasta el último </script> que vea en la página


Sería como:

Código PHP:
//function quitar tags by JoniJnm.es

function quitartag($text,$tag) {
    while(
strpos($text,"<".$tag) < strpos($text,"</".$tag.">")) {
        
$text substr($text,0,strpos($text,"<".$tag)).substr($text,strpos($text,"</".$tag.">") + strlen($tag) + 3);
    }
    return 
$text;
}

$text quitartag($text,"div");
$text quitartag($text,"script");
$text quitartag($text,"b");
//o la que quieras

//pero con ereg_replace mola más 
__________________
JoniJnm.es

Última edición por JoniJnm; 22/09/2008 a las 19:14
  #7 (permalink)  
Antiguo 22/09/2008, 19:09
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Quitar etiqueta script - expresiones regulares

Justamente lo que estás pidiendo es lo que hace el ? en el ejemplo que te pasé.
No entiendo por qué escapaste el ? y lo pusiste como \?, haciendo que perdiera su función.

Por otro lado, el problema es que por lo que leí las funciones ereg* no soportan el "?" de esa forma, así que creo que la mejor opción es que uses las funciones preg* (http://php.net/pcre)

Úsalo tal cual lo escribí en el ejemplo:
Código PHP:
$texto preg_replace("#<script(.*?)</script>#",'',$texto); 

Última edición por AlvaroG; 22/09/2008 a las 19:17
  #8 (permalink)  
Antiguo 22/09/2008, 19:10
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 17 años
Puntos: 4
Respuesta: Quitar etiqueta script - expresiones regulares

Ok, voy a probar otra vez
__________________
JoniJnm.es
  #9 (permalink)  
Antiguo 22/09/2008, 19:13
Avatar de JoniJnm  
Fecha de Ingreso: mayo-2007
Ubicación: Madrid
Mensajes: 264
Antigüedad: 17 años
Puntos: 4
Respuesta: Quitar etiqueta script - expresiones regulares

Poniendo esto:

Código PHP:
$texto "<b>hola</b> qué tal estás? <div>yo bien</div><script>//aaa</script> jejeje<b><div></div></b>";
$texto ereg_replace("<script(.*?)</script>",'',$texto); 
echo 
htmlentities($texto); 
salta:
Cita:
Warning: ereg_replace() [function.ereg-replace]: REG_BADRPT

PD: No escapé el ?, fue un fallo al escribir
__________________
JoniJnm.es
  #10 (permalink)  
Antiguo 22/09/2008, 20:43
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Quitar etiqueta script - expresiones regulares

Quizás viste mi mensaje original y no el editado, justamente me encontré con ese error al hacer algunas pruebas y leí por ahí que las funciones ereg* no soportan ese operador. Por eso te recomendaba en la edición de mi respuesta que usaras preg_replace.

Saludos.
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 05:00.