我正在jinja文件中构建一个json对象:
object_name = {
property_name: "{{ _("Some Text which might have "quotes" in it") }}"
}
然后在script标签中导入上面的jinja2文件
注意:_(“文本”)用于替换为翻译文本,因此()中的文本将替换为其他语言的文本,因此我无法预测翻译是否包含双引号
知道如何转义传入的引号并将其转换为例如“
已编辑
解决方案:
对我们来说,这个问题的解决方案是让python经过所有的翻译并转义所有的qoutations。但我们总是要确保至少英语文本不会有问题,无论如何,我们已经控制了这一点...到目前为止:)
请同时查看此文档
http://pology.nedohodnik.net/doc/user/en_US/ch-poformat.html#sec-poescapes
5条答案
按热度按时间bihw5rsg1#
Jinja2从2.9版本开始有一个很好的过滤器,如果你从字符串创建json,它会生成一个用双引号“"括起来的字符串。你可以安全地在javascript中使用它。而且你不需要自己加上引号。
在您的特定情况下,在Python中创建dict,然后使用一次将其转换为javascript对象可能会更容易
tojson
转义引号"
,并通过转义<>&'
等重要符号来防止XSS。r7xajy2e2#
在
flask
中,有一个名为tojson
的默认过滤器,您可以使用它,或者使用普通的jinja2
,您可以创建自己的tojson
过滤器:aoyhnmkz3#
我不清楚这个问题。如果用单个反斜杠转义不起作用,那么也用反斜杠转义
gpnt7bae4#
过滤器是按顺序应用的,所以假设变量
sometext
中有文本,就可以执行类似这样的操作:这将在将字符串标记为安全之前应用
replace
。请记住,您必须信任字符串的来源以避免漏洞。xe55xuns5#
如果你需要转义javascript中的HTML,jinja2也有转义过滤器,它可以将&,〈,〉,',和“翻译成实体,这样你就可以在提示符中编辑html代码。