3 回答

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您在這里查看源代碼,它將更加清晰。
此功能完成以下兩件事:
它將輸入字符串中的字符替換為JS_ESCAPE_MAP中定義的字符
這樣做的目的是確保javascript代碼正確序列化,而不會(huì)干擾嵌入它的外部字符串。例如,如果您的JavaScript字符串用雙引號(hào)引起來(lái),則字符串文字中的所有引號(hào)都必須用單引號(hào)引起來(lái),以免破壞代碼。
該函數(shù)還檢查結(jié)果字符串是否為html安全。如果不是,則進(jìn)行必要的轉(zhuǎn)義以確保該字符串變?yōu)閔tml安全并返回結(jié)果。
當(dāng)您使用escape_javascript時(shí),通常會(huì)動(dòng)態(tài)地將其嵌入到另一個(gè)字符串或現(xiàn)有的html中。您需要確保這樣做不會(huì)使整個(gè)頁(yè)面無(wú)法呈現(xiàn)。
其他回復(fù)中指出了此回復(fù)的某些方面,但我想將所有內(nèi)容放在一起,包括javascript轉(zhuǎn)義和html轉(zhuǎn)義之間的區(qū)別。此外,一些響應(yīng)暗示此功能有助于避免腳本注入。我認(rèn)為這不是此功能的目的。例如,在您的評(píng)論中,如果您的評(píng)論具有警報(bào)(“嗨,那里”),則僅將其附加到節(jié)點(diǎn)將不會(huì)觸發(fā)彈出窗口。您沒(méi)有將其嵌入在頁(yè)面加載或通過(guò)其他事件觸發(fā)的函數(shù)中。僅將alert('hi there')作為您的html的一部分并不意味著它將作為javascript執(zhí)行。
話雖如此,但我并不否認(rèn)不可能進(jìn)行腳本注入。但是要避免這種情況,在獲取用戶數(shù)據(jù)并將其存儲(chǔ)在數(shù)據(jù)庫(kù)中時(shí)需要采取步驟。您提供的功能和示例與呈現(xiàn)已保存的信息有關(guān)。
希望這對(duì)您有所幫助。
添加回答
舉報(bào)