2012-03-08 17 views
5

Chcę przekonwertować, w python, znaki specjalne, takie jak "%$!&@á é ©" i nie tylko '<&">', jak wszystkie dokumenty i referencje, które znalazłem do tej pory pokazuje. cgi.escape nie rozwiązuje problemu.Jak konwertować znaki specjalne na encje html?

Na przykład ciąg "á ê ĩ &" powinien zostać przekonwertowany na "&aacute; &ecirc; &itilde; &amp;".

Czy anyboy wie, jak go rozwiązać? Używam Pythona 2.6.

+2

Pamiętaj o dwóch rzeczach: (1) nazwy zgłoszeń mogą powodować problemy, powinieneś raczej używać elementów liczbowych. (2) Po co w ogóle używać podmiotów? W większości przypadków lepszym rozwiązaniem jest kodowanie UTF-8 dokumentu, aby mógł zawierać litery, a nie używać encji. –

+1

http://wiki.python.org/moin/EscapingHtml – Quentin

+0

Zgadzam się z tobą @KonradRudolph. Nie lubię używać podmiotów, ale system, w którym pracuję, używa, więc nie mam wyboru. =/ –

Odpowiedz

5

znalazłem wbudowany w roztworze szukając htmlentitydefs.codepoint2name że @Ruben Vermeersch powiedział w swojej odpowiedzi. Roztwór znaleźć tutaj: http://bytes.com/topic/python/answers/594350-convert-unicode-chars-html-entities

Oto funkcja:

def htmlescape(text): 
    text = (text).decode('utf-8') 

    from htmlentitydefs import codepoint2name 
    d = dict((unichr(code), u'&%s;' % name) for code,name in codepoint2name.iteritems() if code!=38) # exclude "&"  
    if u"&" in text: 
     text = text.replace(u"&", u"&amp;") 
    for key, value in d.iteritems(): 
     if key in text: 
      text = text.replace(key, value) 
    return text 

Dziękuję wszystkim za pomoc! ;)