2012-03-08 44 views
5

Tôi muốn chuyển đổi, trong python, các ký tự đặc biệt như "%$!&@á é ©" và không chỉ '<&">' như tất cả các tài liệu và tài liệu tham khảo tôi đã tìm thấy cho đến nay cho thấy. cgi.escape không giải quyết được vấn đề.Làm thế nào để chuyển đổi các ký tự đặc biệt thành các thực thể html?

Ví dụ: chuỗi "á ê ĩ &" phải được chuyển đổi thành "&aacute; &ecirc; &itilde; &amp;".

Có ai biết cách giải quyết không? Tôi đang sử dụng python 2.6.

+2

Hãy nhận biết hai điều: (1) sự lôi kéo tên có thể gây ra sự cố, có thể bạn nên sử dụng các thực thể dạng số thay thế. (2) Tại sao phải sử dụng các thực thể? Trong hầu hết các trường hợp, giải pháp tốt hơn là mã hóa tài liệu UTF-8 để nó có thể chứa các chữ cái và không sử dụng các thực thể. –

+1

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

+0

Tôi đồng ý với bạn @KonradRudolph. Tôi không thích sử dụng thực thể, nhưng hệ thống mà tôi đang sử dụng, vì vậy tôi không có lựa chọn nào khác. =/ –

Trả lời

7

Bạn có thể xây dựng vòng lặp của riêng bạn bằng cách sử dụng từ điển, bạn có thể tìm thấy trong http://docs.python.org/library/htmllib.html#module-htmlentitydefs

Một bạn đang muốn tìm htmlentitydefs.codepoint2name

+0

Đó là một ý tưởng hay! ; D –

+0

Liên kết không còn hoạt động nữa. Sử dụng HTMLParser thay vì trong Python 2, và tương đương, html.parser, trong Python 3. – oxidworks

5

Tôi tìm thấy một giải pháp xây dựng trong tìm kiếm htmlentitydefs.codepoint2name rằng @Ruben Vermeersch nói trong câu trả lời của mình. Các giải pháp đã được tìm thấy ở đây: http://bytes.com/topic/python/answers/594350-convert-unicode-chars-html-entities

Dưới đây là các chức năng:

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 

Cảm ơn tất cả các bạn đã giúp đỡ! ;)

Các vấn đề liên quan