2012-02-01 26 views
1

我與我的AJAX調用發送相當多的值,如jQuery的AJAX /帳數據,其中一個查詢字符串值「event_name」來自用戶輸入。如果用戶輸入符號(&)符號,則postData字符串會中斷,並且不會在該符號之後發送任何內容。的符號

例案例:& EVENT_NAME = d &摹服裝啓動 黨& set_menu =現有...

我明白了什麼錯誤,但不是很確定最好的解決將是什麼。我是否會將這些角色轉換成別的東西,還是有逃避它們的方法?另外,還有其他會對腳本造成傷害的字符,例如加號(+)或減號( - )或撇號(')?

回答

3

如果你通過了POSTDATA將jQuery的地圖,它將編碼的組件爲您提供:

var postData = { aid: aid, 
       lid: lid, 
       ... 

如果你真的需要傳遞一個字符串,你應該使用encodeURIComponent正確編碼用戶數據。

W3C有some more information on form encoding

+0

謝謝,我會讀這個。有問題的字符串只是一個短名稱,一個事件名稱,來自我的辦公室工作人員,而不是普通公衆。我使用@Oybek建議的escape(變量)。 – TheCarver 2012-02-01 20:59:32

+0

'escape'函數已被棄用。最好使用更具體的'encodeURIComponent'函數。 (雖然逃生可能會奏效)。請參閱:http://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent – 2012-02-02 14:14:02

+0

近兩年我在Google上找到我的問題(這個問題)。在獲得更多經驗後,我現在認爲這是更好的答案,所以我已將之前接受的答案換成了你的答案。 – TheCarver 2014-01-25 15:23:23

0

只需使用:

postData = encodeURIComponent (postData); 

空空之前。

escape,unescape,encodeURI,encodeURIComponent是您可能需要使用Ajax的各種方法。 但是,如果您使用轉義(http://www.google.com),您還將轉義://,破壞您的URI。 這就是爲什麼你應該使用encodeURI或encodeURIComponent。 另請參閱When are you supposed to use escape instead of encodeURI/encodeURIComponent?

+2

以這種方式轉義將摺疊整個查詢字符串。結果將像發佈像這樣'http://example.com/path/?somegarbage'相同 – Oybek 2012-02-01 20:35:32

6

轉義您的每個值。

var postData = "aid="+escape(aid)+"&lid="+escape(lid) ... ; 
+0

這工作非常感謝。這只是可能包含錯誤字符的event_name變量,所以我逃過了那一個。 – TheCarver 2012-02-01 20:54:43

1

首先使用地圖。

post = { 
    "aid":aid, 
    "lid":lid, 
    "token":token 
    ... 
} 

然後生成url編碼的字符串。

a=[]; 
for(var x in post){ 
    a.push(encodeURIComponent(x)+"="+encodeURIComponent(post[x])); 
} 
var postData = a.join("&"); 

更新1: 如果您正在使用jQuery不需要生成的URL編碼字符串。只需通過地圖。

更新2: escape並不好,因爲它只有ASCII處理。所以使用encodeURIComponentWhen are you supposed to use escape instead of encodeURI/encodeURIComponent?謝謝@SamuelEdwinWard

+0

更好使用'encodeURIComponent'而不是'escape'(就像jQuery一樣)。 – 2012-02-02 15:04:11

+0

@SamuelEdwinWard謝謝。更新了答案。 – 2012-02-02 15:30:29