2013-07-29 3 views
3

У меня есть php-скрипт, который отлично работает на моем сервере localhost.json_decode() не работает на веб-сервере

Когда я переместил все с локального хоста на веб-сервер, мой json_decode не работает.

Я пробовал json_encode и до сих пор ничего.

Что может быть проблемой для такого поведения?

мой код:

$productsArr = json_encode($_GET['object']);

$_GET['object'] проверяется JSON.

Моим последним вариантом может быть magic_quotes, но я не знаю, могу ли я изменить файл PHP.ini с помощью cPanel, который является моим единственным доступом к серверу.

Буду признателен за любые идеи.

EDIT:

это часть моего URL:

Request URL:http://something.com/download.php?object=[{%22code%22:%222F-58S%22},{%22code%22:%22HT-45H%22},{%22code%22:%2244-3%22},{%22code%22:%22898-OPv%22}]&checkbox= 

Я использую эти заголовки, если это еще важно:

header('Content-Description: File Transfer'); 
header("Content-type: application/ms-word"); 
header("Content-Disposition: attachment;Filename=$name_of_file.doc"); 
+2

Try вторя $ _GET ['object'] и убедитесь, что это то, что вы думаете. Также должен ли этот код быть json_decode(), а не json_encode() – Anigel

+0

@Anigel Я пробовал, но не повторяю ничего .. weird ?? в любом случае пробовал только $ _GET и все равно ничего ... Я вижу, что данные фактически передаются в сетевом окне –

+0

В этом случае у вас что-то не так с вашим запросом. Какой URL-адрес вы запрашиваете? У вас есть что-то после имени файла, не так ли? например http://blah.com/index.php?object=XXXXXXXX – Anigel

ответ

7

Я должен был сделать это, чтобы сделать json_decode работа. Может быть, для этого есть лучшая схема.

$j = $_POST["json"]; 
$j = str_replace("\\\\\"", "###dq###", $j); 
$j = str_replace("\\", "", $j); 
$j = str_replace("###dq###", "\\\"", $j); 

или, короче говоря:

$j = stripslashes($j); 
+1

Ну, эта функция называется ['stripslashes'] (http://php.net/manual/en/function.stripslashes.php). – PleaseStand

+0

Как удобно! – Mundi

0

2 подсказки:
1-эхо $ _GET [ 'объект'], если смотреть \ в stripcslashes использования текста(), а затем json_decode().
2-Если посмотреть StdClass Используйте ERRor этот код:

$productsArr = json_decode($_GET['object'],true); 
+0

1 - 'stripslashes' - более подходящая функция для использования здесь. 2 - предположительно, код уже работает на одном из серверов, так что, вероятно, это не так. – PleaseStand

+0

Я пробовал stripslashes и ничего –

+0

Пожалуйста, вставьте строку вывода: 'code'echo $ _GET ['object'];' code' here;) – ops

-1

Если магия Кавычки ваша проблема, Вы можете поместить этот код в верхней части ваших точек входа сценария

function undoMagicQuotes($array, $topLevel=true) { 
     $newArray = array(); 
     foreach($array as $key => $value) { 
      if (!$topLevel) { 
       $key = stripslashes($key); 
      } 
      if (is_array($value)) { 
       $newArray[$key] = undoMagicQuotes($value, false); 
      } 
      else { 
       $newArray[$key] = stripslashes($value); 
      } 
     } 
     return $newArray; 
    } 
    $_GET = undoMagicQuotes($_GET); 
    $_POST = undoMagicQuotes($_POST); 
    $_COOKIE = undoMagicQuotes($_COOKIE); 
    $_REQUEST = undoMagicQuotes($_REQUEST); 
Смежные вопросы