путаница - PullRequest
       11

путаница

0 голосов
/ 11 июня 2011

Я создал приложение для 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, но $ аргумент равен

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

Итак, переданная строка JSON выглядит нормально, но по какой-то причине она не может быть декодирована на веб-сервере. Кто-нибудь может мне с этим помочь? Почему не работает?

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Похоже, что ваш 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 голосов
/ 11 июня 2011

Отключить magic_quotes_gpc . Это была совершенно ошибочная функция «безопасности», которая никогда не должна использоваться. Он запускает addslashes() для всего пользовательского ввода, при условии, что это решит проблемы с SQL-инъекцией (это не так).

Если сервер не ваш, и поэтому вы не можете его отключить, воспользуйтесь сейчас хаком «Отключение магических кавычек во время выполнения» по этой ссылке и рассмотрите возможность перехода на новый хост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...