通过JSON/AAJAX将用户输入的文本格式化发送到PHP的正确方式


Proper way to format user-entered text input for sending via JSON/AJAX to PHP?

我遇到了一些用户输入的问题,我想通过包含特殊字符的AJAX将这些输入作为JSON发送到PHP,比如",'等。我正在发送一个数组(用于slickgrid)的内容,除非包含这些字符,否则一切都很好。我知道PHP有方便的函数mysql_real_eescape_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);
?>

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

我看了看firebug,当特殊字符包括在内时,它似乎根本没有发送任何东西。。。当然,当它只是信件或其他什么的时候,它会这样做。

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

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对象,它正在将其更改为服务器通常从post中获得的名称-值对。

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