2011-06-11 86 views
0

我已經創建了Android應用程序,並且必須使用JSON與我的網站進行通信。 JSON(客戶端,Android的側)看起來是這樣的:json混淆

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代碼的Web服務器後,惡夢開始了!顯然,一切都被髮送的方式應該是,但在服務器端的PHP代碼創建的問題:

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

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

看來的「json_decode」這一結果爲空,但$說法等於

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

所以通過JSON字符串似乎確定,但由於某種原因,它不能在web服務器上解碼。誰能幫我這個?爲什麼它不起作用?

+1

http://php.net/manual/en/security.magicquotes.disabling.php – mario 2011-06-11 16:43:45

回答

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" 
} 
+0

是啊!而已! :) 謝謝! :) – guest86 2011-06-11 17:05:34

0

Disable magic_quotes_gpc。這是一個完全錯誤的「安全」功能,絕不應該使用。它在所有用戶輸入上運行addslashes(),前提是這可以解決SQL注入問題(它不會)。

如果服務器不是你的,所以你不能禁用它,請使用「在運行時禁用魔術引號」現在攻擊該鏈接並考慮移動到新的主機。