【发布时间】:2011-09-12 02:45:20
【问题描述】:
我遇到了一个有趣的问题。如果我通过 post 以“传统”方式提交我的 PHP 表单,我将捕获表单数据,如下所示:
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 将序列化的表单数据视为:headline:I'm+just+here+for+friends! 所以在我的 updateDataEntry 方法中使用 mysql_real_escape_string($string) 仍然会在其中添加转义字符数据库。
【问题讨论】:
-
使用通过 jQuery 发布的数据调用
mysql_real_escape_string有什么问题?没有理由它不应该工作。 -
它可以工作,但它以稍微不同的格式发送表单数据(见上文)不同的是导致数据库转义特殊字符
-
哪些字符不应该被转义。您能否举例说明每种情况下在数据库中插入的内容?
-
单引号在数据库中被转义,如下所示:我只是来找朋友的!
-
奇怪的是我只在使用 $.post 并将我的表单数据作为序列化字符串传递给它时看到这个。
标签: php jquery serialization mysql-real-escape-string