我可以使用jquery $ .post对序列化表单数据进行编码

时间:2011-09-12 02:45:21

标签: php jquery serialization mysql-real-escape-string

我遇到了一个有趣的问题。如果我通过帖子提交我的PHP表单以“tradtional”方式执行操作,我会捕获表单数据,如下所示:

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

我使用mysql_real_escape_string($ string)将它添加到我的数据库之前逃离数据服务器端,一切都很棒。

如果我现在使用jqueries $ .post方法提交相同的表单并将其传递给我的序列化数据

$.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)仍然在里面添加转义字符DB。

4 个答案:

答案 0 :(得分:1)

我认为此链接有助http://api.jquery.com/serialize/解决您的问题。

答案 1 :(得分:1)

经过几个小时的撕裂我发现了问题。我的php.ini文件中启用了魔术引号。如果其他人遇到此问题,您可以将其关闭,如下所示:

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

现在一切都很好!

答案 2 :(得分:0)

简单的解决方法是始终以相同的格式将其提交到表单。在第二次将PHP传递给$ .post之前,先运行PHP htmlentities()htmlspecialchars()

答案 3 :(得分:0)

mysql_real_escape_string将反斜杠添加到以下字符:\ x00,\ n,\ r,\,',“和\ x1a,对吗?因此它不会影响%和特殊字符。如果要将与headline:I%27m+just+here+for+friends%21完全相同的字符串插入到db中,只需使用urlencode对其进行编码,然后再转义。