2010-06-10 95 views
0

我發佈的數據與jQuery的AJAX到PHP,但如果輸入有'裏面,數據將不會被張貼。我試過encodeURIComponent,但不會工作。撇號問題與PHP的AJAX帖子

對此有何看法?

感謝

編輯: 我的代碼

var name = $("input#name_add").val(); 
     name = encodeURIComponent(name); 

$.post("function.php", { name: name }, function(data) { 

           //codes 
       }); 



$query = "UPDATE `table` SET name = '" . stripslashes($_POST['name']) . "' WHERE ID = '$id'"; 
$result = mysql_query($query); 
if ($result){ 
print "ok"; 

} 
+0

我們能否有客戶機/服務器代碼的代碼片段? – Anax 2010-06-10 16:56:20

+0

添加片段.. – 2010-06-10 17:03:53

+0

當您使用post方法時,爲什麼要對字符串進行編碼?如果你使用get,那應該是必須的。 – 2ndkauboy 2010-06-10 17:06:16

回答

0

嘗試檢查魔術引號與get_magic_quotes_gpc()您的服務器上設置。如果使用mysql_real_escape_string(),則需要使用strip_slashes()

查看get_magic_quotes_gpc()文檔中的示例。

+0

檢查,它是關閉 – 2010-06-10 17:21:09

+0

該死的,我無法找到任何關於在javascript中逃避撇號 – 2010-06-10 17:51:38

0

如果magic_quotes_gpc已關閉,爲什麼要在查詢中刪除斜槓?

嘗試:

$query = "UPDATE `table` SET name = '" . mysql_real_escape_string($_POST['name']) . "' WHERE ID = '$id'"; 

如果您使用POST,你不應該需要傳遞之前,將逃跑的數據,但在你的MySQL的代碼中使用的stripslashes你與任何會引起問題撇號,那麼你的SQL將不會被轉義。

+0

「如果你使用POST,你不應該需要逃脫數據通過它之前「但特殊字符打破阿賈克斯如果我沒有在javascript中逃脫 – 2010-06-10 18:14:46

+0

@Ahmet vardar是你所有的代碼?您在js中使用'encodeURIComponent',但在php中剝離斜槓。 'encodeURIComponent'用十六進制代碼編碼數據不是斜線,所以你爲什麼要去掉斜槓。通過剝離斜線,你將非轉義的數據傳遞給mysql,當你使用撇號時,會導致它破壞,更不用說mysql注入問題了。 – 2010-06-10 18:26:07

+0

好的,我用mysql_real_escape_string替換了帶斜線,並且在js中我將它作爲臨時文件。解決方案名稱= name.replace(「'」,「」); – 2010-06-10 19:04:39

4

encodeURIComponent方法不撇號編碼,試試這個:

encodeURIComponent(str).replace("'", "%27"); 
0

這就是解決了這個問題對我來說。由於JavaScript encodeURIComponent()函數不會將撇號編碼爲%27,因此我使用自己的replaceAll()函數自己完成了該操作。

JS代碼片段:

name = encodeURIComponent(name.replaceAll("'", '%27')); 

這是我的公用事業的replaceAll()函數JS文件

String.prototype.replaceAll = function(f, r, no_escape) { 
    var rexp = new RegExp(Util.EscapeRegExp(f), 'g'); 
    if (no_escape) { rexp = new RegExp(f, 'g'); } 
    return this.replace(rexp, r); 
}; 

對於我而言,我需要撇號無法% 27,而PHP函數urldecode()也不會做撇號,所以我用str_replace()來處理這個問題。

PHP代碼段

$name = str_replace('%27', "'", urldecode($_POST['name']));