escape
過(guò)濾器可以將字符串中的特殊字符轉(zhuǎn)義。比如將HTML代碼輸出顯示,而不是解析HTML代碼。如<
會(huì)轉(zhuǎn)換為 <
。escape
它只轉(zhuǎn)義五個(gè)這樣的字符:<
,>
,&
,‘
和“
。<
會(huì)轉(zhuǎn)換為 <
,>
會(huì)轉(zhuǎn)換為 >
,&
會(huì)轉(zhuǎn)換為 &
,”
會(huì)轉(zhuǎn)換為 "
,’
會(huì)轉(zhuǎn)換為 '
。
也可以使用 e
來(lái)代替 escape
。因?yàn)?e
是 escape
的別名,使用效果一致。
默認(rèn)地,所有的標(biāo)簽輸出都是自動(dòng)轉(zhuǎn)義的。因此一般情況下可以忽略這個(gè)過(guò)濾器。在某種情況下可能會(huì)需要用到。
除了使用過(guò)濾器,也支持使用 autoescape
標(biāo)簽對(duì)整塊代碼進(jìn)行轉(zhuǎn)義。
escapejs
過(guò)濾器可以將js代碼中的特殊字符進(jìn)行轉(zhuǎn)義。如\r
會(huì)轉(zhuǎn)換為 \u000D
。escapejs
會(huì)將除了 a-zA-Z
或空格、/
外的其它字符,都轉(zhuǎn)換為 \uxxxx
的顯示形式。
escape
和 e
過(guò)濾器的使用方法:
} }
escapejs
過(guò)濾器的使用方法:
}
比如將 <script>
轉(zhuǎn)義,則可以這么寫:
} }顯示結(jié)果
<script> <script>
使用 autoescape
標(biāo)簽對(duì)整段代碼進(jìn)行轉(zhuǎn)義處理。autoescape
標(biāo)簽需要一個(gè)參數(shù)來(lái)明確說(shuō)明是需要轉(zhuǎn)義還是不轉(zhuǎn)義。 on
是轉(zhuǎn)義, off
是不轉(zhuǎn)義。
# 不轉(zhuǎn)義}
轉(zhuǎn)義
}
顯示結(jié)果
<script>alert(‘xss’);</script> <script>alert('xss');</script>
escape
和 e
過(guò)濾器直接輸出結(jié)果:
} }
顯示結(jié)果
<script> <script>
autoescape
}}
}
}
輸出結(jié)果:
<script>alert('xss');</script> <script>alert(‘xss’);</script> <script>alert('xss');</script> <script>alert('xss');</script>
escapejs
過(guò)濾器
}顯示結(jié)果
escape sequences \u000D\u000A\u005C\u0027\u005C\u0022 special chars \u0022\u003F\u0021\u003D\u0024\u003C\u003E