จากกรณีการใช้ 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 ควรใช้งานได้ แต่ไม่มีเครื่องหมายคำพูดเดี่ยว รุ่นนี้รวมถึง tuple ที่อัปเดตพร้อมกับคำสั่งของการเปลี่ยนกลับด้านเพื่อหลีกเลี่ยงปัญหาสมมาตร:
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 ที่ไม่ใช้ค่า Escape ในฐานข้อมูลของคุณอาจเหมาะสมกว่า มันจะคุ้มค่าที่จะได้รับผลลัพธ์ที่ไม่ใช้ค่า Escape จาก BeautifulSoup หากเป็นไปได้และหลีกเลี่ยงกระบวนการนี้โดยสิ้นเชิง
ด้วย Django การหลบหนีจะเกิดขึ้นเฉพาะในระหว่างการแสดงเทมเพลต ดังนั้นเพื่อป้องกันการหลบหนีคุณเพียงแค่บอกเครื่องยนต์ templating ที่จะไม่หนีสตริงของคุณ โดยใช้หนึ่งในตัวเลือกเหล่านี้ในเทมเพลตของคุณ:
{{ context_var|safe }}
{% autoescape off %}
{{ context_var }}
{% endautoescape %}