这是一个escapejs
过滤器,基于Django的一个,我在Jinja2的模板写的使用:
_js_escapes = {
'\\': '\\u005C',
'\'': '\\u0027',
'"': '\\u0022',
'>': '\\u003E',
'<': '\\u003C',
'&': '\\u0026',
'=': '\\u003D',
'-': '\\u002D',
';': '\\u003B',
u'\u2028': '\\u2028',
u'\u2029': '\\u2029'
}
# Escape every ASCII character with a value less than 32.
_js_escapes.update(('%c' % z, '\\u%04X' % z) for z in xrange(32))
def jinja2_escapejs_filter(value):
retval = []
for letter in value:
if _js_escapes.has_key(letter):
retval.append(_js_escapes[letter])
else:
retval.append(letter)
return jinja2.Markup("".join(retval))
JINJA_ENVIRONMENT.filters['escapejs'] = jinja2_escapejs_filter
例模板中的安全使用:
<script type="text/javascript">
<!--
var variableName = "{{ variableName | escapejs }}";
…
//-->
</script>
当variableName是str
或unicode
。
请看这里:http://jinja.pocoo.org/docs/templates/#escaping –
我不需要逃避jinja标签文本本身,我需要确保'html_string'不包含任何有害字符。 – meshy
也许|安全过滤器是你以后比:http://flask.pocoo.org/docs/templating/#standard-filters –