Django 사용 사례를 고려할 때 두 가지 대답이 있습니다. 다음은 django.utils.html.escape
참조 용 기능입니다.
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("'", '''))
이것을 뒤집으려면 Jake의 답변에 설명 된 Cheetah 함수가 작동해야하지만 작은 따옴표가 없습니다. 이 버전에는 대칭 문제를 피하기 위해 교체 순서가 반대로 업데이트 된 튜플이 포함되어 있습니다.
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)
그러나 이것은 일반적인 해결책이 아닙니다. 로 인코딩 된 문자열에만 적합합니다 django.utils.html.escape
. 보다 일반적으로 표준 라이브러리를 사용하는 것이 좋습니다.
# 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)
제안 : 데이터베이스에서 이스케이프되지 않은 HTML을 저장하는 것이 더 합리적 일 수 있습니다. 가능하면 BeautifulSoup에서 이스케이프 처리되지 않은 결과를 다시 찾고이 프로세스를 완전히 피하는 것이 좋습니다.
Django에서는 이스케이프 처리는 템플릿 렌더링 중에 만 발생합니다. 탈출을 막기 위해 템플릿 엔진에서 문자열을 이스케이프하지 말라고 지시하십시오. 이렇게하려면 템플릿에서 다음 옵션 중 하나를 사용하십시오.
{{ context_var|safe }}
{% autoescape off %}
{{ context_var }}
{% endautoescape %}