【问题标题】:escape json to be read as array in php转义 json 以在 php 中读取为数组
【发布时间】:2011-12-01 04:39:05
【问题描述】:

我现在一直坚持这个安静的时间。 我要做的就是向 php 发送一个 json 文本,处理它并发送一个响应 bacl ..

这是我作为文本区域值发送的数据..

**asdasd #$**&**%^*( AAAA SADQWEASD /// '' \\\ '' l; "" **

下面是发送到php的json(从控制台获取):

data={"Text":"asdasd #$&%^*( AAAA SADQWEASD /// '' \\\\\\ '' l; \"\" "}

我正在使用 jquery ajax 函数如下:

    function ajaxfunc(data, path){
        $.ajax({
            type: "POST",
            url: path, 
            data: 'data='+data, 
            success: function(response){
            }
        });
    }

在 php 中,我正在这样做。

$res = json_decode(stripslashes(escapeJsonString($_POST['feed'])), true);

function escapeJsonString($value) { 
    # list from www.json.org: (\b backspace, \f formfeed)

    $search = array("\n", "\r", "\u", "\t", "\f", "\b", "/", '"');
    $replace = array("\\n", "\\r", "\\u", "\\t", "\\f", "\\b", "\/", "\"");
    $result = str_replace($search, $replace, $value);

    $escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c"); 
    $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b"); 
    $result = str_replace($escapers, $replacements, $value); 

    return $result; 
}

echo $res["Text"];

问题是:& .. 没有在 php 中被解析,因此响应为空。 我还想确保检测到换行符..基本上我期待“所见即所得”使用 json .. json_encode 和 json_decode

【问题讨论】:

  • 也许这是一个错字或混淆失败,但$_POST['feed'] 不会包含您的数据,因为您在$.ajax 调用中使用密钥data 发送了它。
  • @Andrew :是的,这是一个错字.. 它应该是 $_POST['data']
  • 您尝试做的事情可能有更好的选择。为什么需要将json格式的数据发回服务器呢?如果您只是想以 key => value 对的形式访问服务器上的数据,那么您可以将 JS 对象传递给 $.ajax 函数,并将它们编码为查询字符串并将它们 POST 到服务器。你能澄清一下你想在这里做什么吗?
  • 我正在做的是使用 serializeArray() 获取表单值并使用 JSON.Stringify 将其发送到 php .. 请建议一个替代方案..
  • 如果你有一组表单输入,那么你是在 serialize() 之后,而不是 serializeArray()。 serializeArray() 对于处理 JS 中的表单输入很有用,但如果你只想将其发送到服务器,用户 serialize()。

标签: php jquery ajax json


【解决方案1】:

基于只想将表单输入发送到服务器的评论,请按以下方式使用 serialize():

$.ajax({
    type: "POST",
    url: path, 
    data: $('form').serialize(), 
    success: function(response){
    }
);

如果您只想通过 $_POST 数组访问服务器上的表单输入,那么在客户端转换为 JSON 是一种浪费。 serialize() 应该非常适合您。

但如果您真的想使用 JSON,请使用 Douglas Crockford here 的 JSON-js 库。请注意,还有很多关于此主题的其他信息:Serializing to JSON in jQuery。下面的例子:

$.ajax({
    type: "POST",
    url: path, 
    data: 'data='+( JSON.stringify(data) ), 
    success: function(response){
    }
);

【讨论】:

  • 我避免使用 serialize() 或 serializeArray() 的原因是它会发送如下数据: {"name" : "data"}, {"value" : "asdasdas asd"} 而不是{"data" : "asdasdas asd"} 我正在尝试将 POST 数据发送到 PHP,如上所述。我还想在中保留换行符
【解决方案2】:

如果你想发送 JSON 格式的数据,你可以试试这个

data =  {"Text":"asdasd #$&%^*( AAAA SADQWEASD /// '' \\\\\\ '' l; \"\" "};
data =  JSON.stringify(data);

然后用你的 jquery.ajax 或 jquery.post 发送

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2018-07-03
    • 2018-10-25
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多