Với trường hợp sử dụng Django, có hai câu trả lời cho điều này. Đây là django.utils.html.escape
chức năng của nó , để tham khảo:
def escape(html):
"""Returns the given HTML with ampersands, quotes and carets encoded."""
return mark_safe(force_unicode(html).replace('&', '&').replace('<', '&l
t;').replace('>', '>').replace('"', '"').replace("'", '''))
Để đảo ngược điều này, hàm Cheetah được mô tả trong câu trả lời của Jake sẽ hoạt động, nhưng thiếu trích dẫn đơn. Phiên bản này bao gồm một bộ cập nhật, với thứ tự thay thế được đảo ngược để tránh các vấn đề đối xứng:
def html_decode(s):
"""
Returns the ASCII decoded version of the given HTML string. This does
NOT remove normal HTML tags like <p>.
"""
htmlCodes = (
("'", '''),
('"', '"'),
('>', '>'),
('<', '<'),
('&', '&')
)
for code in htmlCodes:
s = s.replace(code[1], code[0])
return s
unescaped = html_decode(my_string)
Tuy nhiên, đây không phải là một giải pháp chung; nó chỉ thích hợp cho các chuỗi được mã hóa với django.utils.html.escape
. Tổng quát hơn, đó là một ý tưởng tốt để gắn bó với thư viện tiêu chuẩn:
# Python 2.x:
import HTMLParser
html_parser = HTMLParser.HTMLParser()
unescaped = html_parser.unescape(my_string)
# Python 3.x:
import html.parser
html_parser = html.parser.HTMLParser()
unescaped = html_parser.unescape(my_string)
# >= Python 3.5:
from html import unescape
unescaped = unescape(my_string)
Như một gợi ý: có thể có ý nghĩa hơn khi lưu trữ HTML không thoát khỏi cơ sở dữ liệu của bạn. Sẽ đáng để xem xét nhận lại kết quả không được giải quyết từ BeautifulSoup nếu có thể và tránh hoàn toàn quá trình này.
Với Django, thoát chỉ xảy ra trong khi kết xuất mẫu; Vì vậy, để tránh thoát bạn chỉ cần nói với công cụ tạo khuôn mẫu không thoát khỏi chuỗi của bạn. Để làm điều đó, sử dụng một trong các tùy chọn sau trong mẫu của bạn:
{{ context_var|safe }}
{% autoescape off %}
{{ context_var }}
{% endautoescape %}