我创建了Android应用,必须使用JSON与我的网站进行通信。 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字符串似乎没问题,但由于某种原因它无法在webserver上解码。谁能帮我这个?为什么它不起作用?
答案 0 :(得分:2)
似乎你的JSON过早地被转义,这会触发错误的语法错误。
如果$参数采用您声明的格式,则以下过程将起作用:
<?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"
}
答案 1 :(得分:0)
Disable magic_quotes_gpc。这是一个完全被误导的“安全”功能,永远不应该使用。它在所有用户输入上运行addslashes()
,前提是这将解决SQL注入问题(它没有)。
如果服务器不是您的,因此您无法禁用它,请立即使用“在运行时禁用魔术引号”黑客攻击该链接,并考虑转移到新主机。