【问题标题】:Post escaped Javascript array and unescape it in PHP发布转义的 Javascript 数组并在 PHP 中取消转义
【发布时间】:2016-08-11 01:30:54
【问题描述】:

我有一些 javascript 代码可以获取两个 html 表单输入字段的值。我转义了这些值以允许用户输入特殊字符,然后将它们放入一个字符串化的数组中,然后发布。

$(document).ready(function() {
  $("#submit").click(function() {
    var BuilderName = escape($('[name=BuilderName]').val());
    var OwnersName = escape($('[name=OwnersName]').val());
    var arraydata = [BuilderName, OwnersName];
    $.post("DCF_Update_Query.php", {
      data: JSON.stringify(arraydata)
    }, function() {
         alert('Successful');
       }).fail(function() {
            alert('Failed');
          });
  });
});

在我的 PHP 文件中,我检索并解码数组并将其插入到我的数据库中。

$data = json_decode($_POST['data']);

mysqli_query($conn,"INSERT INTO dcf (BuilderName, OwnersName)
VALUES ('$data[0]','$data[1]')");

我的问题是转义字符以%26%27 等形式输入数据库。如何取消转义这些字符,然后使用mysqli_real_escape_string() 重新转义它们。另外,我听说json_decode() 会自动转义特殊字符。如果是这种情况,那么我什至需要用mysqli_real_escape_string() 来逃避它们吗?非常感谢任何帮助,谢谢!

【问题讨论】:

  • 如果只是绑定参数就不用担心转义了。你不应该这样做"INSERT INTO dcf (BuilderName, OwnersName) VALUES ('$data[0]','$data[1]')"
  • 我认为这些值是 url 编码的,所以你应该能够 urldecode($val)%26 转换回来。如果不是 url 编码,那么它将是 htmlspecialchars_decode().

标签: javascript php arrays database escaping


【解决方案1】:

你真的,真的,真的需要一个准备好的声明。无需转义

$prep = $conn->prepare("INSERT INTO dcf (BuilderName, OwnersName) VALUES (?, ?)");
$prep->bind_param('ss', $data[0], $data[1]);
$prep->execute();

【讨论】:

  • 谢谢,这似乎在我从 javascript 中删除了 escape() 之后起作用。出于某种原因,当我在表单输入中输入 ' 时,我认为 javascript 正在中断。还要感谢拉斯克拉特,他也提出了这个建议。
【解决方案2】:

尝试通过 urldecode 函数传递 $data 变量的内容:

$data = urldecode(json_decode($_POST['data']));

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 2015-05-16
    • 2010-10-27
    • 2015-05-31
    • 2011-09-15
    • 2017-05-20
    • 2014-02-22
    • 1970-01-01
    相关资源
    最近更新 更多