dav*_*ism 8

Flask正在使用它来测试它所使用的JSON库是否在不需要时使用转义斜杠.如果库有,那么json.dump('/')将生成'"\\/"'(相当于原始字符串r'"\/"',请参阅此处以获取有关转义字符的说明).

Flask可以选择多个JSON库中的一个,而某些库/版本可以转义正斜杠而其他库则不会. Flask包含解释此问题的评论.

如果库执行转义斜杠,Flask将在转储JSON时撤消它,以实现库之间的一致性.

# figure out if simplejson escapes slashes.  This behavior was changed
# from one version to another without reason.
_slash_escape = '\\/' not in _json.dumps('/')
...
def htmlsafe_dumps(obj, **kwargs):
    ...
    if not _slash_escape:
        rv = rv.replace('\\/', '/')
    ...
Run Code Online (Sandbox Code Playgroud)

在HTML中呈现JSON时,Flask仍会转义不安全的HTML字符,因此可能不安全的字符串"</script>"变得"\\u003c/script\\u003e"安全.


Two*_*ist 5

反斜杠(\)是转义字符.在几种编程语言中,它意味着将下一个字符视为文字,而不是让它执行其正常功能(例如:放置文字引用而不是将其视为结束引用).

两个反斜杠(\\)表示字面反斜杠.如,不执行转义功能.

因此,JSON中的转义斜杠是\/,但要检测Python必须使用\\/,否则会将反斜杠视为转义.

顺便r''\\一句,这就是为什么Python提供了所谓的"原始字符串文字"前缀,因此您不必编写以获得字面反斜杠.

为了发现Flask在我能做到之前做到这一点的具体原因,我认为大卫是这样的.请参阅此答案,更详细地解释.