Tornado模板中如何防止单引号被转为'?
解决Tornado模板渲染时单引号被转义为HTML实体的问题
问题根源在于你在模板中使用了escape()函数,Tornado的该函数会自动将单引号等特殊字符转换为HTML实体(如'转为'),这是默认的安全转义机制。以下是两种可行的解决方法:
方法一:修改模板,禁用变量转义
将模板中的escape()调用替换为raw过滤器,明确告诉Tornado不需要对该变量进行HTML转义:
<option value="" SELECTED></option> {% for item1 in items %} <optgroup label="{{ item1[0] | raw }}"> {% for item2 in item1[1] %} <option value="{{ item2 | raw }}">{{ item2 | raw }}</option> {% end %} {% end %}
方法二:在Python代码中标记内容为安全
从tornado.escape导入Markup类,将需要原样输出的字符串包装为Markup对象,这样模板渲染时会自动跳过转义处理:
from tornado.escape import Markup # 对包含单引号的字符串进行包装 tmp_s = Markup(tmp_s) tmp_n = Markup(tmp_n) tmp_a = Markup(tmp_a) tmp_S_array.append(tmp_s) tmp_S_array.append(tmp_n) tmp_S_array.append(tmp_a)
注意:只有当你确认内容来源可信(如内部数据库,无用户输入的恶意代码)时,才建议禁用转义,避免引发XSS安全风险。
内容的提问来源于stack exchange,提问作者Aub
相关产品推荐
相关产品推荐

