【问题标题】:Pass JSON from flask to template and decode html entity [duplicate]将 JSON 从烧瓶传递到模板并解码 html 实体 [重复]
【发布时间】:2016-07-03 23:55:12
【问题描述】:

所以我已经坚持了一段时间。我有一个 MongoDB,我查询并以 JSON 形式返回。

我这样做是:

bson.json_utils.dumps(list(all_exams.find(query))

然后我将它传递给一个烧瓶模板变量,以便在 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>

问题在于,在脚本中,JSON 无法通过 denotable 正确解析,因为它包含 &amp;#34; 这是双引号的实体值,但如果我检查源代码,它不应该看起来像这样。 html 页面不应该将其显示为"。这只发生在脚本部分。不在&lt;p&gt; 标记中(将所有&amp;#34; 打印为")。

我误会了什么?

【问题讨论】:

    标签: python html json flask character-encoding


    【解决方案1】:

    为了避免 XSS 攻击,flask 和其他模板语言默认转义值:它将" 转换为 HTML 实体,以便浏览器将其读取为文本以显示给人类而不是 HTML 语法的一部分(例如&lt;a href="..."&gt;)。这发生在所有标签中:在 &lt;p&gt; 标签内,您会在浏览器中看到引号,但源代码仍然是实体。

    要告诉烧瓶不要逃避东西,请使用{{results_json | safe}}。那是您断言该值是安全的,而不是告诉烧瓶使其安全(这是它之前所做的)。

    【讨论】:

    • 非常感谢。我已经被困在这个问题上太久了!
    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2020-12-21
    • 2018-02-19
    • 2018-12-16
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多