【问题标题】:JSON cannot be decoded on serverjson混淆
【发布时间】:2011-06-11 16:34:12
【问题描述】:

我创建了一个必须使用 JSON 与我的网站通信的 Android 应用。 JSON(在客户端,Android 端)如下所示:

private static String JSONSend(Context ctx, JSONObject obj, String ObjName, String address) {
    IHttpDispatcher disp = new HttpDispatcher();
    Vector<String> ss = new Vector<String>();
    String link = address;

    String locale = uzmiLocale(ctx);
    if(locale=="")
        return "";

    try {
        obj.put("Lokal", locale);
        ss.add(ObjName + obj.toString());
        String ID = disp.getHttpResponse_POST(link, ss);
        return ID;
    } catch (Exception e) {
        return "";
    }
}

上面的方法是从这里调用的:

public static String sendReq(Context ctx, String txt, String number) {
    JSONObject jsn = new JSONObject();
    try {
        jsn.put("TextPoruke", txt);
        jsn.put("BrTel", number);
        return JSONSend(ctx, jsn, "JSNSend=", "www.mysite.com");
    } catch (JSONException e1) {
        return "";
    }
}

在我的 Wamp 服务器上一切正常,但是在将我的 php 代码移动到网络服务器后,噩梦开始了!显然,一切都以应有的方式发送,但在服务器端,此 php 代码正在产生问题:

if(isset ($_POST['JSNSend']))
{
$argument = $_POST['JSNSend'];

$json = json_decode($argument,true);
$broj = $json['BrTel'];
$jsnLocale = $json['Lokal'];

似乎“json_decode”的结果是NULL,但是$argument等于

{"\TextPoruke\": \"sometext\", \"BrTel\":\"111\"}

所以传递的 JSON 字符串似乎没问题,但由于某种原因,它无法在网络服务器上解码。谁能帮我这个?为什么它不起作用?

【问题讨论】:

标签: php android json


【解决方案1】:

似乎您的 JSON 过早地转义了,从而触发了错误的语法错误。

如果 $argument 采用您指定的格式,则以下过程将起作用:

<?php

$s = '{"\TextPoruke\": \"sometext\", \"BrTel\":\"111\"}';

echo 'Without stripslashes:' . PHP_EOL;
var_dump( json_decode( $s ) );

echo 'With stripslashes:' . PHP_EOL;
var_dump( json_decode( stripslashes($s) ) );

?>

结果:

Without stripslashes:
NULL
With stripslashes:
object(stdClass)#1 (2) {
  ["TextPoruke"]=>
  string(8) "sometext"
  ["BrTel"]=>
  string(3) "111"
}

【讨论】:

  • 是的!而已! :) 谢谢! :)
【解决方案2】:

Disable magic_quotes_gpc。这是一个完全被误导的“安全”功能,永远不应该使用。它在所有用户输入上运行addslashes(),前提是这将解决 SQL 注入问题(它没有)。

如果服务器不是您的,因此您无法禁用它,请暂时使用该链接上的“在运行时禁用魔术引号”hack,并考虑移至新主机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2014-01-29
    • 2015-09-18
    相关资源
    最近更新 更多