2012-03-08 7 views
5

저는 파이썬에서 "%$!&@á é ©"과 같은 특수 문자를 변환하고 싶습니다. 그리고 지금까지 발견 한 모든 문서와 참고 자료가 '<&">' 일뿐입니다. cgi.escape는 문제를 해결하지 못합니다.특수 문자를 HTML 엔터티로 변환하는 방법은 무엇입니까?

예를 들어, "á ê ĩ &" 문자열은 "&aacute; &ecirc; &itilde; &amp;"으로 변환되어야합니다.

아무도 그것을 해결하는 방법을 알고 있습니까? 파이썬 2.6을 사용하고 있습니다.

+2

두 가지 사항에 유의하십시오. (1) 이름 entites가 문제를 일으킬 수 있으므로 대신 숫자 엔티티를 사용해야합니다. (2) 엔티티를 전혀 사용하지 않는 이유는 무엇입니까? 대부분의 경우 더 나은 해결책은 문자를 포함 할 수 있도록 엔티티를 사용하지 않도록 문서를 UTF-8 인코딩하는 것입니다. –

+1

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

+0

@KonradRudolph에 동의합니다. 엔티티를 사용하는 것을 좋아하지 않지만, 내가 사용하고있는 시스템이 사용하기 때문에 선택의 여지가 없습니다. =/ –

답변

7

당신은 당신이 찾고있는 사람이

+0

그건 좋은 생각이야! ; D –

+0

링크가 더 이상 작동하지 않습니다. Python 2에서는 HTMLParser를, Python 3에서는 html.parser와 동등한 것을 사용하십시오. – oxidworks

5

htmlentitydefs.codepoint2name 내가 htmlentitydefs.codepoint2name 검색 솔루션에 내장 발견 http://docs.python.org/library/htmllib.html#module-htmlentitydefs

에서 찾을 수있는 사전을 사용하여 자신의 루프를 만들 수있는 @Ruben Vermeersch는 그의 대답에서 말했다. 이 솔루션은 이곳을 찾았습니다

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 

이 도와 주셔서 모두 감사합니다 : http://bytes.com/topic/python/answers/594350-convert-unicode-chars-html-entities

여기에 기능입니다! ;)

관련 문제