2010-02-19 13 views

Respuesta

32

No existe tal cosa en la biblioteca estándar de Python. Es porque Python es un lenguaje de propósito general, mientras que PHP comenzó como un lenguaje orientado a la web.

Sin embargo, usted tiene 3 soluciones:

  • Usted está en un apuro: acaba de hacer su propio. re.sub(r'<[^>]*?>', '', value) puede ser una solución rápida y sucia.
  • Utilice una biblioteca de terceros (se recomienda porque es más a prueba de balas): beautiful soup es realmente bueno y no hay nada que instalar, solo copie el directorio lib e importe. Full tuto with beautiful soup.
  • Utilice un marco. La mayoría de los desarrolladores de Web Python nunca codifican desde cero, usan un marco como django que hace automáticamente estas cosas para usted. Full tuto with django.
+0

¡Hola! Estoy usando Django =) – Viet

+12

Si uso Django: 'de django.utils.html import strip_tags' – Hank

1

Python no tiene una incorporada, pero hay una ungodly number of implementations.

+0

En realidad busqué en Google con la misma consulta que sugirió, pero esos no me hicieron feliz. – Viet

15

Usando BeautifulSoup

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(htmltext) 
''.join([e for e in soup.recursiveChildGenerator() if isinstance(e,unicode)]) 
+0

Es posible que desee hacerle saber que es una lib de terceros. –

+0

Sí, lo sé, gracias :) – Viet

2

que no encontrará muchos equivalentes Python incorporadas para funciones de orden interna de PHP HTML desde Python es más de un lenguaje de programación de propósito general que un lenguaje de desarrollo web. Para el procesamiento HTML, generalmente se recomienda BeautifulSoup.

1

Creé uno para Python 3 usando la clase HTMLParser. Es más detallado que PHP. Lo llamé la clase HTMLCleaner, y puedes encontrar la fuente here y puedes encontrar ejemplos here.

1

Hay una receta estado activo para esto,

http://code.activestate.com/recipes/52281/

Es código antiguo por lo que tiene que cambiar analizador SGML a HTMLParser como se ha mencionado en los comentarios

Este es el código modificado,

import HTMLParser, string 

class StrippingParser(HTMLParser.HTMLParser): 

    # These are the HTML tags that we will leave intact 
    valid_tags = ('b', 'a', 'i', 'br', 'p', 'img') 

    from htmlentitydefs import entitydefs # replace entitydefs from sgmllib 

    def __init__(self): 
     HTMLParser.HTMLParser.__init__(self) 
     self.result = "" 
     self.endTagList = [] 

    def handle_data(self, data): 
     if data: 
      self.result = self.result + data 

    def handle_charref(self, name): 
     self.result = "%s&#%s;" % (self.result, name) 

    def handle_entityref(self, name): 
     if self.entitydefs.has_key(name): 
      x = ';' 
     else: 
      # this breaks unstandard entities that end with ';' 
      x = '' 
     self.result = "%s&%s%s" % (self.result, name, x) 

    def handle_starttag(self, tag, attrs): 
     """ Delete all tags except for legal ones """ 
     if tag in self.valid_tags:  
      self.result = self.result + '<' + tag 
      for k, v in attrs: 
       if string.lower(k[0:2]) != 'on' and string.lower(v[0:10]) != 'javascript': 
        self.result = '%s %s="%s"' % (self.result, k, v) 
      endTag = '</%s>' % tag 
      self.endTagList.insert(0,endTag)  
      self.result = self.result + '>' 

    def handle_endtag(self, tag): 
     if tag in self.valid_tags: 
      self.result = "%s</%s>" % (self.result, tag) 
      remTag = '</%s>' % tag 
      self.endTagList.remove(remTag) 

    def cleanup(self): 
     """ Append missing closing tags """ 
     for j in range(len(self.endTagList)): 
       self.result = self.result + self.endTagList[j]  


def strip(s): 
    """ Strip illegal HTML tags from string s """ 
    parser = StrippingParser() 
    parser.feed(s) 
    parser.close() 
    parser.cleanup() 
    return parser.result 
3
from bleach import clean 
print clean("<strong>My Text</strong>", tags=[], strip=True, strip_comments=True) 
Cuestiones relacionadas