3

私はこのような配列を持っています:

Array (
    [utm_source] => website
    [utm_medium] => fbshare
    [utm_campaign] => camp1
    [test_cat] => red
    [test_sub] => Category
    [test_ref] => rjdepe
)

クッキーにjson_encode入れました。Cookie から取得してデコードしたいのですが、空白の画面が表示されます。何が悪いのか混乱しています。私には、この JSON は正しいように見えます。

{"utm_source":"website","utm_medium":"fbshare","utm_campaign":"camp1","test_cat":"red","test_sub":"Category","test_ref":"dodere"}

何か案は?

編集:

私のコード:

$value = array(
    'utm_source' => 'website',
    'utm_medium' => 'fbshare',
    'utm_campaign' => 'camp1',
    'test_cat' => 'red',
    'test_sub' => 'Category',
    'test_ref' => 'rjdepe'
);
$value = json_encode($value);
setcookie("TestCookie", $value, time()+3600);

その他のページ:

$cookie = $_COOKIE['TestCookie'];
$cookie = json_decode($cookie);
print_r($cookie);
4

2 に答える 2

11

次のように base64_encoding を試してください。

$value = array(
    'utm_source' => 'website',
    'utm_medium' => 'fbshare',
    'utm_campaign' => 'camp1',
    'test_cat' => 'red',
    'test_sub' => 'Category',
    'test_ref' => 'rjdepe'
);
$value = base64_encode(json_encode($value));
setcookie("TestCookie", $value, time()+3600);

その他のページ:

$cookie = $_COOKIE['TestCookie'];
$cookie = json_decode(base64_decode($cookie));
print_r($cookie);
于 2012-06-07T06:43:19.520 に答える
3

あなたの前に:

print_r($cookie);

行う:

json_last_error();

それは何かを返しますか?空白の画面が表示される場合は、パーサーが失敗している可能性があります"。Cookie内のjson文字列の'sの結果がエスケープされている可能性があります\"。試す:

$cookie = json_decode(stripslashes($_COOKIE['TestCookie']));

アップデート

そこで、次のコードを使用して、次の出力を受け取りました。

    $value = array(
        'utm_source' => 'website',
        'utm_medium' => 'fbshare',
        'utm_campaign' => 'camp1',
        'test_cat' => 'red',
        'test_sub' => 'Category',
        'test_ref' => 'rjdepe'
    );

    var_dump($value);

    setcookie('TestCookie', json_encode($value), time()+86400);

    echo $_COOKIE['TestCookie'];

    print_r(json_decode($_COOKIE['TestCookie']));

出力

array(6) {
  ["utm_source"]=>
      string(7) "website"
  ["utm_medium"]=>
      string(7) "fbshare"
  ["utm_campaign"]=>
      string(5) "camp1"
  ["test_cat"]=>
      string(3) "red"
  ["test_sub"]=>
      string(8) "Category"
  ["test_ref"]=>
      string(6) "rjdepe"
}

{
    "utm_source":"website",
    "utm_medium":"fbshare",
    "utm_campaign":"camp1",
    "test_cat":"red",
    "test_sub":"Category",
    "test_ref":"rjdepe"
}

stdClass Object
(
    [utm_source] => website
    [utm_medium] => fbshare
    [utm_campaign] => camp1
    [test_cat] => red
    [test_sub] => Category
    [test_ref] => rjdepe
)

お気づきの方もいらっしゃると思いますが、encodedは配列です。json文字列は文字列です。デコードされた文字列はオブジェクトです。

これを配列に型キャストできます。

$value = (array) json_decode($_COOKIE['TestCookie']);
// Or
$value = json_decode($_COOKIE['TestCookie'], true);

また、

構成によっては、PHPがCookie内の特殊文字をエスケープする場合があります。これは、JSONデコードエラーが中継しているようです。

やってみてください:

json_decode(str_replace('\"', '"', $_COOKIE['TestCookie']), true);
于 2012-06-06T02:45:33.590 に答える