Foros del Web » Programando para Internet » ASP Clásico »

Eliminar tags html

Estas en el tema de Eliminar tags html en el foro de ASP Clásico en Foros del Web. Hola soy nueva en esto de la programación y tal vez mi primera empresa sea algo ambiciosa. El problema que tengo es el siguiente Quiero ...
  #1 (permalink)  
Antiguo 26/06/2008, 05:31
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Pregunta Eliminar tags html

Hola soy nueva en esto de la programación y tal vez mi primera empresa sea algo ambiciosa.

El problema que tengo es el siguiente

Quiero eliminar todos los tags html excepto <br>,<ul>,<ol>,<li>

En este foro encontré esto

<[^>]+> , he intentado modificarlo para adaptarlo a mis necesidades pero me es imposible

Lo que quiero es que la cadena

<br><font color="red">hola</font><br>

quede

<br>hola<br>

Gracias
  #2 (permalink)  
Antiguo 26/06/2008, 12:12
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Eliminar tags html

Hola

Eliminar Tag HTML , puedes expecificar cuales no quieres que sean eliminados

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 26/06/2008, 14:17
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Eliminar tags html

Gracias Adler por tu respuesta, pero lo he probado y no funciona. Ademas quiero usar expresiones regulares.

¿alguna otra idea?
  #4 (permalink)  
Antiguo 26/06/2008, 14:36
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Eliminar tags html

Tienes razón, me fié del enunciado y no miré el código.

Prueba así

Código PHP:
Function LimpiarTags(texto
Dim objRegExpstrlimpio
texto 
replace(texto,"<b>","")
texto replace(texto,"</b>","")
texto replace(texto,"<i>","")
texto replace(texto,"</i>","")
texto replace(texto,"<u>","")
texto replace(texto,"</u>","")


    
Set objRegExp= New RegExp 
objRegExp
.IgnoreCase True
objRegExp
.Global = True

objRegExp
.Pattern "[<][^>]*[^br|ol|li|ul][>]"

strlimpio objRegExp.Replace(texto" "
    
Set objRegExp Nothing
    LimpiarTags 
strlimpio
End 
Function 
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #5 (permalink)  
Antiguo 27/06/2008, 05:15
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Eliminar tags html

perfecto era lo que queria. solo una pregunta ¿habria alguna forma de quitar los replace y que aun asi funcionara?

gracias
  #6 (permalink)  
Antiguo 27/06/2008, 07:41
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Eliminar tags html

Hola

En un principio use el operado ".", para que coincidiera con cada carácter y en el orden adecuado, pero no funcionaba.

Pruebalo tu misma

[<][^>]*[^.br][>]

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #7 (permalink)  
Antiguo 28/06/2008, 04:50
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Eliminar tags html

si, tienes razon no funciona

si alguien tiene alguna otra idea, se lo agradeceria
  #8 (permalink)  
Antiguo 28/06/2008, 06:02
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 3 meses
Puntos: 7
Respuesta: Eliminar tags html

Yo uso esta función para limpiar código HTML malicioso. Modificándola igual te sirve:

Código:
Function SafeHTML(ByVal pStrHTML)
        
        Dim lObjRegExp
        ' If null
        If VarType(pStrHTML) = 1 Then Exit Function
        If pStrHTML = "" Then Exit Function
        Set lObjRegExp = New RegExp
        lObjRegExp.Global = True
        lObjRegExp.IgnoreCase = True
        lObjRegExp.Pattern = "<(/)?SCRIPT|META|STYLE([^>]*)>"
        pStrHTML = lObjRegExp.Replace(pStrHTML, "")
         lObjRegExp.Pattern = "<(/)?(HTML|HEAD|BODY)([^>]*)>"
        pStrHTML = lObjRegExp.Replace(pStrHTML, "")
        lObjRegExp.Pattern = "<(/)?(LINK|IFRAME|FRAMESET|FRAME|APPLET|OBJECT)([^>]*)>"
        pStrHTML = lObjRegExp.Replace(pStrHTML, "")
         lObjRegExp.Pattern = "<(/)?(BUTTON|FORM|FIELDSET|INPUT|SELECT|OPTION)([^>]*)>"
        pStrHTML = lObjRegExp.Replace(pStrHTML, "")
       lObjRegExp.Pattern = "(<A[^>]+href\s?=\s?""?javascript:)[^""]*(""[^>]+>)"
        pStrHTML = lObjRegExp.Replace(pStrHTML, "")
        lObjRegExp.Pattern = "(<IMG[^>]+src\s?=\s?""?javascript:)[^""]*(""[^>]+>)"
        pStrHTML = lObjRegExp.Replace(pStrHTML, "")
        lObjRegExp.Pattern = "<([^>]*) on[^=\s]+\s?=\s?([^>]*)>"
        pStrHTML = lObjRegExp.Replace(pStrHTML, "")
           Set lObjRegExp = Nothing
        
        SafeHTML = pStrHTML
        
End Function


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #9 (permalink)  
Antiguo 30/06/2008, 05:28
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Eliminar tags html

Hola

Además de lo que te dice tammander, este otro funciona sin necesidad de los replace

Código PHP:
Function LimpiarTags(texto
Dim objRegExp

    Set objRegExp
= New RegExp 
objRegExp
.IgnoreCase True
objRegExp
.Global = True

objRegExp
.Pattern "[<](/)*[b|i|u][>]"
texto objRegExp.Replace(texto" "

objRegExp.Pattern "[<][^>]*[^br|ol|li|ul][>]|[\[][^\]]*[\]]"
texto objRegExp.Replace(texto" "


    
Set objRegExp Nothing

    LimpiarTags 
texto

End 
Function 
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #10 (permalink)  
Antiguo 30/06/2008, 07:38
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Eliminar tags html

muchas gracias a ambos

al final me he quedado con el codigo de Adler, no hay que tocarlo

una pregunta Adler ¿para que es esta parte?

[\[][^\]]*[\]]
  #11 (permalink)  
Antiguo 30/06/2008, 07:44
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 3 meses
Puntos: 126
Respuesta: Eliminar tags html

Hola

Es para eliminar los tag bbcode ([quote], [php], etc ..), ya que estaba puesto ...

P.D Estaría bien que guardaras la función de tammander, nunca se sabe lo que puedes necesitar en un futuro
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #12 (permalink)  
Antiguo 01/12/2010, 14:53
 
Fecha de Ingreso: septiembre-2005
Mensajes: 20
Antigüedad: 18 años, 7 meses
Puntos: 0
Exclamación Respuesta: Eliminar tags html

Código:
Function RemoveHTML( strText )
    Dim TAGLIST
    TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;" &_
              "BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;" &_
              "COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;FIELDSET;" &_
              "FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;I;IFRAME;" &_
              "INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;LISTING;MAP;MARQUEE;" &_
              "MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;PARAM;PLAINTEXT;" &_
              "PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;SUB;SUP;" &_
              "TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;WBR;XMP;"

    Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJECT;SCRIPT;STYLE;"
    
    Dim nPos1
    Dim nPos2
    Dim nPos3
    Dim strResult
    Dim strTagName
    Dim bRemove
    Dim bSearchForBlock
    
    nPos1 = InStr(strText, "<")
    Do While nPos1 > 0
        nPos2 = InStr(nPos1 + 1, strText, ">")
        If nPos2 > 0 Then
            strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
	    strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")

            nPos3 = InStr(strTagName, " ")
            If nPos3 > 0 Then
                strTagName = Left(strTagName, nPos3 - 1)
            End If
            
            If Left(strTagName, 1) = "/" Then
                strTagName = Mid(strTagName, 2)
                bSearchForBlock = False
            Else
                bSearchForBlock = True
            End If
            
            If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
                bRemove = True
                If bSearchForBlock Then
                    If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
                        nPos2 = Len(strText)
                        nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
                        If nPos3 > 0 Then
                            nPos3 = InStr(nPos3 + 1, strText, ">")
                        End If
                        
                        If nPos3 > 0 Then
                            nPos2 = nPos3
                        End If
                    End If
                End If
            Else
                bRemove = False
            End If
            
            If bRemove Then
                strResult = strResult & Left(strText, nPos1 - 1)
                strText = Mid(strText, nPos2 + 1)
            Else
                strResult = strResult & Left(strText, nPos1)
                strText = Mid(strText, nPos1 + 1)
            End If
        Else
            strResult = strResult & strText
            strText = ""
        End If
        
        nPos1 = InStr(strText, "<")
    Loop
    strResult = strResult & strText
    
    RemoveHTML = strResult
End Function
  #13 (permalink)  
Antiguo 01/12/2010, 14:54
 
Fecha de Ingreso: septiembre-2005
Mensajes: 20
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Eliminar tags html

Ni que decir que la cadena TAGLIST, permite seleccionar que quitar o no quitar.
  #14 (permalink)  
Antiguo 02/12/2010, 07:59
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Eliminar tags html

Cita:
Iniciado por snomar Ver Mensaje
Ni que decir que la cadena TAGLIST, permite seleccionar que quitar o no quitar.
no te parece un proceso muy largo, y que consume muchos recursos del servidor?? de todos modos gracias
  #15 (permalink)  
Antiguo 18/10/2011, 07:17
 
Fecha de Ingreso: septiembre-2005
Mensajes: 20
Antigüedad: 18 años, 7 meses
Puntos: 0
Exclamación Respuesta: Eliminar tags html

Bueno ya se que el tema es viejo, que si no se usa que si tal o cual, pero me parece interesante para alguien que desee reciclar codigo almacenado en bases de datos y asp clasico, y solo quiere cumplir con alguna de las normas de xhtml. Principalmente eliminar o modificar el uso de mayusculas en los tags html.

En combinacion de las anteriores se podrian eliminar los tags no deseados y ponerlos en minusculas.

la funcion se compone de dos partes:

Código:
  '============ html a LCase ===================
Dim s,re
Function crf(m,p,s)
crf = LCase(m)
End Function
function minHTML(sHTML)
s=sHTML
Set re = New RegExp
With re
.Global = True
.Pattern = "<[^>]+>"
minHTML= .Replace(s,GetRef("crf"))
End With
end function
'============ html a LCase ===================
y se usa:

para mostrarlo:

Código:
Response.Write minHTML(cabecera)
para guardarlo en una variable etc ...

Código:
contenido=minHTML(cabecera)
En todo caso espero que ayude a alguien.
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 00:59.