【问题标题】:PHP set cookie array json cyrillicPHP设置cookie数组json西里尔文
【发布时间】:2015-02-17 10:45:53
【问题描述】:

哦,伙计们,我花了第二天的时间在这些东西上尝试并在 localhost 和托管上一一发现错误,但仍然无法识别问题所在:(

例如我有一个这样的数组:

$wishlistArray = array
    (
    array(
    'id' => '1021397549', 
    'prod-name' => 'Продукт 1',
    'cost' => '4', 
    'sku' => '14:200001438#8;5:361385', 
    'pcs' => '1',
    'ship-num' => '2',
    'ship-name' => 'DHL', 
    'ship-cost' => '2400',
    'img' => 'http://i01.i.site.com/wsphoto/v15/1021397549_1/2014-новая-прекрасная-Продукт1.jpg',
    'aviable' => '999',
    'sku-html' => '<img class="color" height="26" width="26" src="http://i01.i.site.com/wsphoto/sku/v12/1021397549/1021397549_200001438/Хаки-2015-новый-шик-горячая-распродажа-бесплатная-доставка-сексуальные-женщины-красочные-птицы-шифон-рубашка-форме-крыла-летучей.jpg_50x50.jpg" title="8" bigpic="http://i01.i.site.com/wsphoto/sku/v12/1021397549/1021397549_200001438/Хаки-2015-новый-шик-горячая-распродажа-бесплатная-доставка-сексуальные-женщины-красочные-птицы-шифон-рубашка-форме-крыла-летучей.jpg">'
    ),
    array(
    'id' => '2028047220',
    'prod-name' => 'Продукт 2',
    'cost' => '9'   , 
    'sku' => '', 
    'pcs' => '2', 
    'ship-num' => '2',
    'ship-name' => 'EMS',
    'ship-cost' => '1428',
    'img' => 'http://i00.i.site.com/wsphoto/v1/1735472674_1/Продукт2-супер-изображение.jpg',
    'aviable' => '999',
    'sku-html' => ''
    )
    );

我正在尝试将其保存为 cookie,因为接下来我会使用 Javascript 来回显它:

$someJSON = json_encode($wishlistArray);
setcookie("wishlist", $someJSON);
$decode_array = json_decode($_COOKIE["wishlist"]); 
echo 'FROM COOKIE: <pre>', print_r($decode_array), '</pre>';

但在这里它停止了从 500Notice: Undefined variable:Notice: Undefined index: 的不同错误,当我尝试调整时它带有一些 raw_json_encodeaddslashesob_start(); 等,所以我认为主要问题实际上是在设置 Cookie 之前正确转换 Array .

求各位大神,我的脑袋都快疯了,真的不明白该怎么做:(

更新:

这是 json 转换后的明确字符串,我试图将其设置为 cookie 并在 :(

[{"id":"1021397549","prod-name":"2015 \u043d\u043e\u0432\u044b\u0439 \u0448\u0438\u043a! \u0433\u043e\u0440\u044f\u0447\u0430\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0434\u0430\u0436\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0435\u043a\u0441\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0436\u0435\u043d\u0449\u0438\u043d\u044b \u043a\u0440\u0430\u0441\u043e\u0447\u043d\u044b\u0435 \u043f\u0442\u0438\u0446\u044b \u0448\u0438\u0444\u043e\u043d \u0440\u0443\u0431\u0430\u0448\u043a\u0430 \u0444\u043e\u0440\u043c\u0435 \u043a\u0440\u044b\u043b\u0430 \u043b\u0435\u0442\u0443\u0447\u0435\u0439 \u043c\u044b\u0448\u0438 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0431\u043b\u0443\u0437\u043a\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0440\u043e\u044f \u0442\u043e\u043f\u044b","cost":147,"sku":"14:200001438#8;5:361385","pcs":"1","ship-num":"2","ship-name":"e-EMS","ship-cost":796,"img":"http:\/\/i01.i.aliimg.com\/wsphoto\/v15\/1021397549_1\/2015-\u043d\u043e\u0432\u044b\u0439-\u0448\u0438\u043a-\u0433\u043e\u0440\u044f\u0447\u0430\u044f-\u0440\u0430\u0441\u043f\u0440\u043e\u0434\u0430\u0436\u0430-\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f-\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430-\u0441\u0435\u043a\u0441\u0443\u0430\u043b\u044c\u043d\u044b\u0435-\u0436\u0435\u043d\u0449\u0438\u043d\u044b-\u043a\u0440\u0430\u0441\u043e\u0447\u043d\u044b\u0435-\u043f\u0442\u0438\u0446\u044b-\u0448\u0438\u0444\u043e\u043d-\u0440\u0443\u0431\u0430\u0448\u043a\u0430-\u0444\u043e\u0440\u043c\u0435-\u043a\u0440\u044b\u043b\u0430-\u043b\u0435\u0442\u0443\u0447\u0435\u0439.jpg","aviable":"990","sku-html":""},{"id":"2028047220","prod-name":"2015 \u043d\u043e\u0432\u044b\u0439 \u0448\u0438\u043a! \u0433\u043e\u0440\u044f\u0447\u0430\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0434\u0430\u0436\u0430 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0435\u043a\u0441\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0436\u0435\u043d\u0449\u0438\u043d\u044b \u043a\u0440\u0430\u0441\u043e\u0447\u043d\u044b\u0435 \u043f\u0442\u0438\u0446\u044b \u0448\u0438\u0444\u043e\u043d \u0440\u0443\u0431\u0430\u0448\u043a\u0430 \u0444\u043e\u0440\u043c\u0435 \u043a\u0440\u044b\u043b\u0430 \u043b\u0435\u0442\u0443\u0447\u0435\u0439 \u043c\u044b\u0448\u0438 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0431\u043b\u0443\u0437\u043a\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0440\u043e\u044f \u0442\u043e\u043f\u044b 14003","cost":136,"sku":"","pcs":"2","ship-num":"2","ship-name":"China Post Registered Air Mail","ship-cost":110,"img":"http:\/\/i00.i.aliimg.com\/wsphoto\/v0\/2028047220_1\/2015-\u043d\u043e\u0432\u044b\u0439-\u0448\u0438\u043a-\u0433\u043e\u0440\u044f\u0447\u0430\u044f-\u0440\u0430\u0441\u043f\u0440\u043e\u0434\u0430\u0436\u0430-\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0430\u044f-\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430-\u0441\u0435\u043a\u0441\u0443\u0430\u043b\u044c\u043d\u044b\u0435-\u0436\u0435\u043d\u0449\u0438\u043d\u044b-\u043a\u0440\u0430\u0441\u043e\u0447\u043d\u044b\u0435-\u043f\u0442\u0438\u0446\u044b-\u0448\u0438\u0444\u043e\u043d-\u0440\u0443\u0431\u0430\u0448\u043a\u0430-\u0444\u043e\u0440\u043c\u0435-\u043a\u0440\u044b\u043b\u0430-\u043b\u0435\u0442\u0443\u0447\u0435\u0439.jpg","aviable":"998","sku-html":""},{"id":"802048809","prod-name":"\u0414\u0438\u0437\u0430\u0439\u043d\u0435\u0440 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043a\u0440\u0443\u0436\u0435\u0432\u0430 \u0448\u0438\u0444\u043e\u043d \u0431\u043b\u0443\u0437\u043a\u0430 \u0440\u0443\u0431\u0430\u0448\u043a\u0430 \u0441 \u043a\u0430\u0440\u0434\u0438\u0433\u0430\u043d \u0434\u043b\u044f \u0436\u0435\u043d\u0449\u0438\u043d 2015 \u0432\u0435\u0441\u043d\u0430 \u043c\u043e\u0434\u0430 \u0434\u0430\u043c\u044b \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0440\u043e\u044f \u0442\u043e\u043f\u044b","cost":585,"sku":"","pcs":"1","ship-num":"3","ship-name":"Fedex IE","ship-cost":3865,"img":"http:\/\/i01.i.aliimg.com\/wsphoto\/v0\/802048809\/\u0414\u0438\u0437\u0430\u0439\u043d\u0435\u0440-\u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e-\u0438\u0437-\u0434\u0432\u0443\u0445-\u0447\u0430\u0441\u0442\u0435\u0439-\u043a\u0440\u0443\u0436\u0435\u0432\u0430-\u0448\u0438\u0444\u043e\u043d-\u0431\u043b\u0443\u0437\u043a\u0430-\u0440\u0443\u0431\u0430\u0448\u043a\u0430-\u0441-\u043a\u0430\u0440\u0434\u0438\u0433\u0430\u043d-\u0434\u043b\u044f-\u0436\u0435\u043d\u0449\u0438\u043d-2015-\u0432\u0435\u0441\u043d\u0430-\u043c\u043e\u0434\u0430.jpg","aviable":"919","sku-html":""}]

【问题讨论】:

  • $decode_array 的输出是什么?
  • 实际上是&lt;pre&gt;1&lt;/pre&gt;,实际上也根本没有cookie wishlist,但是当我用setcookie("wishlist", "cookie_test"); 这样简单的东西设置它时,它会出现:)
  • 哪一行,包含你的代码doead 注意:未定义的变量emplies
  • 请注意,您在 cookie 上设置的那个将在下一个请求时可用。你应该在print_r上有true标志参数
  • 错误究竟发生在哪几行,完整的错误信息是什么?

标签: php arrays setcookie cyrillic


【解决方案1】:

首先json_decode 需要TRUE-alike 第二个参数来返回关联数组作为结果。 然后检查您是否使用了正确的编码,因为json_decode 将在此处返回 UTF-8 编码的字符串。

【讨论】:

    【解决方案2】:

    用 base64_encode 解决 PHP 部分

       ob_start();
    
        header("Content-Type:text/html;charset=utf-8"); 
    
        function raw_json_encode($input) {
    
                return preg_replace_callback(
                '/\\\\u([0-9a-zA-Z]{4})/',
                function ($matches) {
                    return mb_convert_encoding(pack('H*',$matches[1]),'UTF-8','UTF-16');
                },
                json_encode($input)
                );
    
            }
    
        $someJSON = base64_encode(raw_json_encode($wishlistArray));
        setcookie("wishlist", $someJSON);
        $decode_array = json_decode(base64_decode($_COOKIE["wishlist"])); 
    
        echo 'FROM COOKIE: <pre>', print_r($decode_array), '</pre>';
    

    Javascript 部分未解决所以我只需要意识到如何在 Javascritpt 中将其解码回来,因为

            <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/core-min.js"></script>
            <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-utf16-min.js"></script>
            <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/enc-base64-min.js"></script>
            <script src="//code.jquery.com/jquery-1.10.2.js"></script>
            <script src="src/jquery.cookie.js"></script>
    
    <div id="myCart"></div>
    
        <script>
            var wishlistArray = JSON.parse(CryptoJS.enc.Base64.parse($.cookie('wishlist')));
    
    
                var wishlistArrayDom = "";
                jQuery.each(wishlistArray, function (i, wishlistID) { 
                    wishlistArrayDom += '<br><div><b>' 
                    +               
                    wishlistID["id"] + ' ' +
                    wishlistID["prod-name"] + ' ' +
                    wishlistID["cost"] + ' ' +
                    wishlistID["sku"] + ' ' +
                    wishlistID["pcs"] + ' ' +
                    wishlistID["ship-num"] + ' ' +
                    wishlistID["ship-name"] + ' ' +
                    wishlistID["ship-cost"] + ' ' +
                    wishlistID["img"] + ' ' +
                    wishlistID["aviable"] 
                    +
                    '<br>';
    
                });
    
                $('#myCart').empty();
                $('#myCart').html(wishlistArrayDom); 
    
            }
        </script>
    

    根本不起作用,我以某种方式得到 Uncaught SyntaxError: Unexpected token b on 1 breakpoint

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-09
      • 2017-10-05
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多