2009-05-03 12 views

Odpowiedz

2

Wyjazd this question. To, czego szukasz, to "dekodowanie encji html". Zazwyczaj znajdziesz funkcję o nazwie "htmldecode", która zrobi to, co chcesz. Zarówno Django, jak i Gepard zapewniają takie funkcje jak BeautifulSoup.

Druga odpowiedź będzie działać świetnie, jeśli nie chcesz korzystać z biblioteki, a wszystkie elementy są numeryczne.

+0

dzięki. co ma Django? ponieważ przeglądałem dokumenty, ale nie mogłem niczego znaleźć ... – rick

+0

Nazywa się django.utils.html.escape, podobno. Sprawdź inne pytanie o stackoverflow, które podałem, by uzyskać więcej szczegółów. – easel

+0

Wygląda na to, że django.utils.html.escape działa tylko w celu kodowania, a nie dekodowania. Skończyłem z wykorzystaniem BeautifulSoup. dzięki – rick

-2

nie jestem pewien co do & lub #, ale tutaj jest jakiś kod do dekodowania:

>>>chr(39) 
"'" 
>>>ord("'") 
39 
1

Najbardziej niezawodnym rozwiązaniem wydaje się być this function autorstwa Larsa Pythona Fredrika Lundha. Nie jest to najkrótsze rozwiązanie, ale obsługuje nazwane elementy, a także kody szesnastkowe i dziesiętne.

2

Spróbuj tego: (znaleziono go here)

from htmlentitydefs import name2codepoint as n2cp 
import re 

def decode_htmlentities(string): 
    """ 
    Decode HTML entities–hex, decimal, or named–in a string 
    @see http://snippets.dzone.com/posts/show/4569 

    >>> u = u'E tu vivrai nel terrore - L'aldilà (1981)' 
    >>> print decode_htmlentities(u).encode('UTF-8') 
    E tu vivrai nel terrore - L'aldilà (1981) 
    >>> print decode_htmlentities("l'eau") 
    l'eau 
    >>> print decode_htmlentities("foo < bar")     
    foo < bar 
    """ 
    def substitute_entity(match): 
     ent = match.group(3) 
     if match.group(1) == "#": 
      # decoding by number 
      if match.group(2) == '': 
       # number is in decimal 
       return unichr(int(ent)) 
      elif match.group(2) == 'x': 
       # number is in hex 
       return unichr(int('0x'+ent, 16)) 
     else: 
      # they were using a name 
      cp = n2cp.get(ent) 
      if cp: return unichr(cp) 
      else: return match.group() 

    entity_re = re.compile(r'&(#?)(x?)(\w+);') 
    return entity_re.subn(substitute_entity, string)[0] 
Powiązane problemy