2011-10-31 75 views
0

張貼在阿賈克斯的數據時,我有一個textarea:缺少字符使用JavaScript

<textarea id="my_text"></textarea> 

而且有這樣的JavaScript一些Ajax代碼:

var xmlhttp = new XMLHttpRequest(); 
var my_text = document.getElementById("my_text").value; 
xmlhttp.open("POST", ".", true); 
xmlhttp.send("my_text=" + my_text + "&foo=1"); 

當我充滿textarea的用繩子abc +1 +2 +3,並運行JS代碼。我在服務器端獲得的「my_text」的值是abc 1 2 3

如何更改JS代碼以在服務器端獲取正確的字符串abc +1 +2 +3

回答

3

使用encodeURIComponent(my_text)準備您的文本提交。此函數應始終用於參數,以正確轉義字符。你已經經歷過你的代碼破裂的場合。
當用戶在他的字符串中使用&時,會發生另一個不會轉義字符的有效結果,這有效地創建了一個額外的參數。

xmlhttp.send("my_text=" + encodeURIComponent(my_text) + "&foo=1"); 
+0

非常感謝你! – mitnk

0

另一種選擇是使用escape函數。

xmlhttp.send(「my_text =」+ escape(my_text)+「& foo = 1」);

由於+符號是一個保留的HTTP字符 - 計算爲一個空格(''),所以失去了字符。

編輯:非常真實的,在這種情況下逃生將無法正常工作,因爲它將用十六進制表示替換空格而不是加號。對不起,混淆(臉紅)

+0

謝謝,但似乎逃跑在這種情況下不起作用。如果我使用逃生,我仍然錯過了'+'。 – mitnk