2011-10-31 46 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