2009-12-04 23 views
8

用戶在其中輸入數據我遇到了一個問題,如果有單引號在所有的腳本錯誤的。單引號與jQuery阿賈克斯

什麼是處理用戶輸入,因此不會與jQuery的/ JavaScript的干擾單引號的最佳方式?

更新:

我通過ajax發送它到數據庫。這裏是json ajax調用的數據參數。
data: "{str_" + sectionName + " :'" + UpdateText + "',EntityID: '" + EntityID + "' }",
與更新的文字是可以包含引號的字符串。

+2

提供代碼示例將非常有幫助 – 2009-12-04 04:55:36

+1

您對輸入做什麼? – 2009-12-04 04:55:50

+0

我通過ajax將它發送到數據庫。 這裏是json ajax調用的數據參數。 data:「{str_」+ sectionName +「:'」+ UpdateText +「',EntityID:'」+ EntityID +「'}」, 更新文本是可以包含引號的字符串。 – Adam 2009-12-04 04:58:00

回答

3

你可以找到許多String.replaceAll實現的一個或寫你自己的,只是轉義版本,如\更換任何單或雙引號」或\」。

21

你需要逃避與你打算如何使用您可以使用JavaScript逃生和UNESCAPE功能串\或取決於報價。

alert(escape("mike's")); 
alert(unescape(escape("mike's"))); 

還檢查了這一點的方法來escape strings with jQuery

+0

這工作就像一個魅力! – CodeLikeBeaker 2010-12-13 20:27:14

0

你真的應該用於消毒各種原因你的服務器端腳本里面輸入。如果你只是一切都顯示在用戶輸入那麼你的應用程序可能可以被用來發動跨站點腳本攻擊。

+1

相關的xkcd http://xkcd.com/327/ – thenoviceoof 2009-12-04 05:06:25

+0

我認爲他的問題是,他正在嘗試將數據發送到服務器時出現JavaScript錯誤,客戶端。 – 2009-12-04 05:06:41

0

JavaScript有一個內置的方法,僅用於單引號。其稱爲encodeURIComponent方法,從Javascript Kit

用於一個URI的對於具有特殊意義的字符參數部分進行編碼,以將它們與保留的字符,例如「&」充當鍵/值隔板分開。它比encodeURI()更具包容性,它將在URL字符串中編碼具有特殊含義的所有字符,包括「=」和「&」。僅在URI的參數部分使用此方法;否則,如果URI包含屬於有效URI一部分的字符(即:「+」),則URI可能不再有效,但如果URI參數的一部分應該轉義,則該URI應該轉義。

所以,你的代碼應該變成:

data: "{str_" + encodeURIComponent(sectionName) + " :'" + encodeURIComponent(UpdateText) + "',EntityID: '" + encodeURIComponent(EntityID) + "' }", 

我編碼的一切,我在查詢字符串發送是安全的,但編碼ENTITYID可以說是被忽略,因爲它沒有從用戶來(我假設),所以你知道它不會有特殊字符。

+2

encodeURI和encodeURIComponent不會轉義單引號,至少在當前版本的Chrome/Safari中不會 – 2012-02-17 14:00:51

0

感謝mbrevoort, 我更多地討論他的回答

,當你在查詢EMPID發送一個單引號=「T'via」 EMPID =逃生(EMPID)

當你得到值包括單引號var xxx = request。查詢字符串( 「EMPID」)XXX = unscape(XXX)

如果你想搜索/插入其中包括查詢XXX單引號值=替換(EMPID, 「'」, 「 ''」)

0

爲了逃避在JavaScript中的單引號使用

UpdateText.replace('\'', '\\\'') 

逃避所有的單引號使用

UpdateText.replace(/'/g, '\\\'') 
3

對於AJAX請求轉義值,不寫自己的實現電子商務風景或使用escape()方法。escape()已棄用)。而是創建一個JSON對象並使用JSON.stringify方法。

對於你的情況應該是這樣(忽略動態屬性現在)

//Create Javascript object  
var obj = { SectionName: UpdateText, EntityID: EntityID }; 

在Ajax請求之後,你可以這樣做:

data: JSON.stringify(obj), 

如果要使用動態屬性與您的JSON對象然後爲您的特定情況下,您可以創建該對象的兩個步驟,如:

var obj = { EntityID: EntityID }; 
obj["str_" + sectionName] = UpdateText; 

這種做法可以幫助您避免手動轉義單引號和雙引號以及其他無效字符。 JSON.stringify會照顧到這一點。

(我來到這裏尋找一個有點類似的問題,但一直沒找到合適的工作解決方案,因此最終公佈的說明)

1

既然你提到AJAX,有一種可能性,即串涉及單引號的服務器端被拒絕。 確保您在插入字符串之前使用提供的escape string function,例如通過php提供給數據庫。

$user_name = $_REQUEST['username']; 
$user_name = mysqli_real_escape_string($conn,$user_name); 
$query = "INSERT into chat(username,message) VALUES('".$user_name."')"; 

這有助於逃避可能出現在「$ USER_NAME」字符串的任何單或雙引號。它也可以防止任何類型的SQL注入攻擊!