tri*_*k96 3 html python json character-encoding flask
所以我已经被困在这个问题上有一段时间了。我有一个 MongoDB,我查询并以 JSON 形式返回。
我这样做是通过:
bson.json_utils.dumps(list(all_exams.find(query))
Run Code Online (Sandbox Code Playgroud)
然后,我将其传递到 Flask 模板变量中,以便在 HTML 中的内联 js 脚本中使用。
<div id="results">
<table id="results-table">
</table>
<p>
{{results_json}}
</p>
</div>
<script type="text/javascript" charset="utf-8">
$('#results-table').dynatable({
dataset: {
records: {{results_json}}
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
问题是,在脚本中,JSON 无法正确地通过可表示来解析,因为它包含"That is the 实体值 双引号,但如果我检查源代码,它不应该出现这样的情况。html 页面不应该将其显示为". 这仅发生在脚本部分。不在标签中(将所有内容<p>打印为)。""
我有什么误解吗?
为了避免 XSS 攻击,flask 和其他模板语言默认转义值:它转换"为 HTML 实体,以便浏览器将其读取为要显示给人类的文本,而不是 HTML 语法的一部分(例如<a href="...">)。这种情况发生在所有标签中:在标签内,<p>您可以在浏览器中看到引用,但源代码仍然是实体。
要告诉 Flask 不要转义内容,请使用{{results_json | safe}}. 这是你断言该值是安全的,而不是告诉flask使其安全(这是它之前所做的)。