【问题标题】:Can I encode my serialized form data with jquery $.post我可以用 jquery $.post 对我的序列化表单数据进行编码吗
【发布时间】: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


【解决方案1】:

在扯掉我的头发几个小时后,我发现了问题。在我的 php.ini 文件中启用了魔术引号。如果其他人遇到这种情况,您可以将其关闭,如下所示:

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

现在一切都很好!

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我有点困惑...你是说我应该第一次将数据发布到另一个 php 文件并在第二次发布之前从 htmlentities 返回数据?
    【解决方案3】:

    mysql_real_escape_string 在以下字符前添加反斜杠:\x00、\n、\r、\、'、" 和 \x1a,对吗?所以它不会影响 % 和特殊字符。如果你想将字符串与headline:I%27m+just+here+for+friends%21 完全一样插入到数据库中,只需在转义前使用urlencode 对其进行编码。

    【讨论】:

      猜你喜欢
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多