2011-06-09 41 views
0

我有關於輸入特殊字符的問題。首先,+被認爲是 作爲特殊字符,對吧?我的表單中需要包含+。但是,當我使用AJAX將其發送到我的PHP腳本並使用$_POST訪問變量時,+未顯示,因此未保存在數據庫中。AJAX請求中的特殊字符

例子:

// on the JavaScript side 
value = +123; 
paramPost = "name=abc&value=" + value; 
alert("paramPost = " + paramPost); 
// Output: parampost = name=abc&value=123 
// The + is gone! 
// Also, when I change value to a string, the + is still there, 
// but when PHP receives it, it's gone. 
ajax.doPost(paramPost); 
// on the PHP side 
$val = $_POST['value']; 
echo "val = $val"; 
// Output: 123 
// The + is no longer there! 

我能做些什麼來解決這個問題?

我嘗試這樣做:

$val = htmlspecialchars($_POST['value'], ENT_QUOTES); 

...但它仍然沒有奏效。

+1

請清理你的代碼並使用代碼標籤。是// parampost = name = abc&value = + 123應該被註釋掉?它有關係嗎? – matchew 2011-06-09 03:23:23

+0

我不太瞭解php,但是有沒有辦法讓你逃脫字符? – 2011-06-09 03:29:19

+0

嗨matchew!謝謝你,已經得到了解決方案..我只是寫出來的基礎:)即時通訊使用encodeURIComponent()及其工作正常。感謝您的回覆:) – tinks 2011-06-09 03:36:24

回答

3

+是對多個冗餘的;將+123更改爲"+123"

如果您的JavaScript庫不能逃脫,也可以使用encodeURIComponent(value)而不是value。所以,你的固定代碼應該是:

value = "+123"; 
paramPost = "name=abc&value=" + encodeURIComponent(value); 

// .. 

ajax.doPost(paramPost); 
+0

嗨minitech!非常感謝!即時使用encodeURIComponent()現在,它給出+的十六進制值。非常感謝! :d – tinks 2011-06-09 03:34:03

0

在javascript中,數字前面的前導'+'表示它是正數。要將值'+1'作爲URI查詢參數的一部分發送,您需要將其轉義。的正確轉義的「+1」版本將是:

%2B1 

其中%2B是十六進制值關於「+」

+0

您好Rob Raisch !!爲此非常感謝!當然它需要有'+'的十六進制值。謝啦! – tinks 2011-06-09 03:35:07