我遇到了一个有趣的问题。如果我通过帖子提交我的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。
答案 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对其进行编码,然后再转义。