2011-09-12 66 views
1

我遇到了一個有趣的問題。如果我提交我的PHP形成「tradtional」的方式通過後一個動作我捕捉表單數據如下:

headline:I%27m+just+here+for+friends%21 

我用它添加到我的數據庫之前逃脫數據服務器端:mysql_real_escape_string($字符串)一切都很好。

如果我現在使用jqueries $。員額方法提交相同的形式,並通過它我的數據串行

$.post("save_data.php", $("#form_id").serialize(), 
    function(data) { 
     // process my results 
    } 
);     

它看起來像這樣:

headline:I'm+just+here+for+friends! 

的mysql_real_escape通話不實際工作因爲我假設數據已經或者沒有被正確編碼。有沒有解決這個問題或者在發佈之前對錶單數據進行編碼的方法?

這裏是我當前如何處理內部PHP表單數據:

if ($_SERVER['REQUEST_METHOD'] == "POST") { 
    $result = updateDataEntry($_POST); 
} 

$ _ POST看到序列化形式數據:標題:我剛+ + +這裏爲+的朋友!所以在我的updateDataEntry方法中使用mysql_real_escape_string($ string)仍然在數據庫中添加轉義字符。

+0

用通過jQuery發佈的數據調用'mysql_real_escape_string'有什麼問題?沒有理由它不應該工作。 –

+0

它可以工作,但它以稍微不同的格式發送表單數據(請參閱上文)。差異導致數據庫轉義特殊字符 – Paul

+0

哪些字符不應該轉義。你能給出一個例子,說明在每種情況下DB中插入什麼? –

回答

1

幾個小時撕裂我的頭髮,我發現這個問題後,魔術引號在我的php.ini文件中啓用。如果別人運行到這一點,你可以打開它們如下所示:

; Magic quotes for incoming GET/POST/Cookie data. 
magic_quotes_gpc = Off 

現在一切正常大!

0

簡單的修復方法是始終以相同的格式將其提交到表單。運行PHP的htmlentities()htmlspecialchars(),然後再次將它傳遞給$ .post。

+0

我有點困惑...你說我應該第一次發佈數據到另一個PHP文件,並返回來自htmlentities的數據在第二次發佈之前? – Paul

0

mysql_real_escape_string將反斜槓預置爲以下字符:\ x00,\ n,\ r,\,',「和\ x1a,對嗎?因此它不會影響%和特殊字符如果要插入字符串酷似headline:I%27m+just+here+for+friends%21到數據庫只是urlencode編碼它就逃。

相關問題