【问题标题】:Proper way to format user-entered text input for sending via JSON/AJAX to PHP?格式化用户输入的文本输入以通过 JSON/AJAX 发送到 PHP 的正确方法?
【发布时间】:2012-02-15 18:21:35
【问题描述】:

我在用户输入的输入中遇到了一些问题,我想通过 AJAX 将其作为 JSON 发送到 PHP,其中包含特殊字符,如“、”等。我正在发送数组的内容(用于slickgrid),除非包含这些字符,否则一切正常。我知道 PHP 有方便的函数 mysql_real_escape_string,但是有任何 jquery 类似物吗?这里是相关代码:

req = $.ajax({
 url: url,
 dataType: "text",
 data: {"data": $.JSON.encode(data)},
 type: "post",
 success: onSaveSuccess,
 error: onSaveError
});

这是提交给的 PHP:

<?php
//$data = array();

//if (isset($_POST['data']))
//{
 //$data = json_decode($_POST['data']);
//}

//header('Content-Type: text/javascript');
//echo json_encode($data);
print_r($_POST);
?>

更清楚一点,当包含特殊字符时,既不会触发成功事件,也不会触发错误事件。

我查看了萤火虫,当包含特殊字符时,它似乎根本不发送任何东西......当然,当它只是字母或其他东西时它会发送任何东西。

【问题讨论】:

  • 你不能只做mysql_real_escape_string(stripslashes($_POST['var']))吗?
  • 它一开始就没有进入 PHP,所以没有......
  • 哦,我明白了。因为字符串中的逗号。
  • jQuery 将为您处理有效负载的正确转义。您不需要 并且 不应该在 UI 端进行任何进一步的转义。您应该在后端的反序列化 JSON 有效负载上使用 mysql_real_escape_string。也许显示你的 PHP 代码会有所帮助。
  • 好的,我展示了当前的情况。我除了 print_r($_POST) 什么都不做。发送请求时,我有一个与“保存”挂钩的事件,该事件被触发……然后什么也没有。 AJAX 不会触发成功或错误事件。我发送的数据中有问题的字符串类似于:'",.

标签: php javascript jquery ajax json


【解决方案1】:

这是由于来自here 的脚本显然在某些类型的输入上失败了。切换到 json2.js 并使用 JSON.stringify 已经解决了这个问题。

【讨论】:

    【解决方案2】:
    data: {"data": $.JSON.encode(data)},
    

    传递比您需要的更复杂的 JSON 对象。

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

    正在寻找一个序列化的 JSON 对象,但 jQuery 在后台为您做了很多工作。

    试试这个

    data: $.JSON.encode(data),
    

    在您的 AJAX 调用中。然后在PHP中

    $data['myPostValue'] = $_POST['myPostValue'];
    

    您正在向$.ajax 调用发送一个 JSON 对象,它正在将其更改为服务器通常从帖子中获取的名称值对。

    【讨论】:

      【解决方案3】:

      javascript 有一个escape() 函数。你可以$.JSON.encode(escape(data)) 可能会工作

      【讨论】:

      猜你喜欢
      • 2015-09-23
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多