python - Span 元素不将 ' 替换为撇号

标签 python flask utf-8 jinja2 codemirror

我正在将文本传递到 code mirror javascript 中通过 jinja2 的文本编辑器库元素。

code = `{% for line in file_content%}{{ line }}\n{% endfor %}`

//CODE MIRROR
var editor = CodeMirror(document.getElementById('code_editor'), {
    value: code,
    mode: 'python',
    theme: 'neo'
});

如果 file_content 设置为某些 Python 代码,例如 ["self._tophash = ''"],则会生成以下 HTML 元素:

<div id='code_editor'>
   <span role="presentation" style="padding-right: 0.1px;">        
        self._tophash = &amp;#39;&amp;#39;
   </span>
</div>

虽然当它打印到屏幕时,HTML 显示为 ' 而不是 '

有谁知道为什么会这样吗?

最佳答案

Jinja2 永远 HTML escape anything you insert into a document 。这包括转义引号字符,因为这些字符可用于“突破” HTML 属性,从而使您的网站遭受跨脚本攻击。

您必须明确将数据标记为“安全”:

code = `{% for line in file_content%}{{ line|safe }}\n{% endfor %}`

就我个人而言,我会将数据插值为 JSON:

code = {{ file_content|join('\n')|tojson }};

JSON(几乎)是 Javascript 的子集;方式Jinja2 tojson filter将 Python 数据编码为 JSON 保证与 Javascript 兼容。

如果您使用的是 Jinja2 版本 older than 2.10 (Flask 1.0 的最小版本),您仍然需要将结果标记为安全,但这在这里很好,因为您不会生成插入 HTML 元素或属性的数据。

关于python - Span 元素不将 ' 替换为撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50857326/

相关文章:

python - 如何获得两个双元素子列表列表之间的对称差异?

php - PHP 中的 UTF-8 编码 xml

安卓工作室 : unmappable character for encoding UTF-8

python - Select DropDown无法使用JS回调更改ColumnDataSource

Python:如何仅使用 while 循环返回列表而不修改原始列表?

python - 从打印输出中获取表格 (pandas)

mysql - 如何在不更改数据的情况下更改表编码?

python - 使用 nosql 排名在 SQLalchemy 中排序和分页

python - 如何使用 flask_oauthlib 交换访问 token 的一次性授权码?

python - Flask:如何获取上传文件夹路径