PHP serialize 序列化字符川转 JSON

305 阅读1分钟

递归调用 unserialize 反序列化

$test = 'a:8:{s:4:"cart";s:439:"a:1:{s:32:"bef40f55e8ec1e2d878b9c8157c4277b";a:11:{s:3:"key";s:32:"bef40f55e8ec1e2d878b9c8157c4277b";s:10:"product_id";i:37075;s:12:"variation_id";i:0;s:9:"variation";a:0:{}s:8:"quantity";i:1;s:9:"data_hash";s:32:"b5c1d5ca8bae6d4896cf1807cdf763f0";s:13:"line_tax_data";a:2:{s:8:"subtotal";a:1:{i:1;d:0.21;}s:5:"total";a:1:{i:1;d:0.21;}}s:13:"line_subtotal";d:1;s:17:"line_subtotal_tax";d:0.21;s:10:"line_total";d:1;s:8:"line_tax";d:0.21;}}";s:11:"cart_totals";s:422:"a:15:{s:8:"subtotal";s:4:"1.00";s:12:"subtotal_tax";d:0.21;s:14:"shipping_total";s:4:"0.00";s:12:"shipping_tax";i:0;s:14:"shipping_taxes";a:0:{}s:14:"discount_total";i:0;s:12:"discount_tax";i:0;s:19:"cart_contents_total";s:4:"1.00";s:17:"cart_contents_tax";d:0.21;s:19:"cart_contents_taxes";a:1:{i:1;d:0.21;}s:9:"fee_total";s:4:"0.00";s:7:"fee_tax";i:0;s:9:"fee_taxes";a:0:{}s:5:"total";s:4:"1.21";s:9:"total_tax";d:0.21;}";s:15:"applied_coupons";s:6:"a:0:{}";s:22:"coupon_discount_totals";s:6:"a:0:{}";s:26:"coupon_discount_tax_totals";s:6:"a:0:{}";s:21:"removed_cart_contents";s:6:"a:0:{}";s:10:"wc_notices";N;s:8:"customer";s:689:"a:26:{s:2:"id";s:1:"0";s:13:"date_modified";s:0:"";s:8:"postcode";s:0:"";s:4:"city";s:0:"";s:9:"address_1";s:0:"";s:7:"address";s:0:"";s:9:"address_2";s:0:"";s:5:"state";s:1:"M";s:7:"country";s:2:"ES";s:17:"shipping_postcode";s:0:"";s:13:"shipping_city";s:0:"";s:18:"shipping_address_1";s:0:"";s:16:"shipping_address";s:0:"";s:18:"shipping_address_2";s:0:"";s:14:"shipping_state";s:1:"M";s:16:"shipping_country";s:2:"ES";s:13:"is_vat_exempt";s:0:"";s:19:"calculated_shipping";s:0:"";s:10:"first_name";s:0:"";s:9:"last_name";s:0:"";s:7:"company";s:0:"";s:5:"phone";s:0:"";s:5:"email";s:0:"";s:19:"shipping_first_name";s:0:"";s:18:"shipping_last_name";s:0:"";s:16:"shipping_company";s:0:"";}";}';

function recursion_unserialize($ss){
    if(is_string($ss) && preg_match('/^[a-z]:\d+:/', $ss)){
        $data = @unserialize($ss);
        if($data !== false){
            if(is_array($data)){
                foreach($data as $key => $val){
                    $data[$key] = recursion_unserialize($val);
                }
            } else if(is_object($data)){
                foreach($data as $key => $val){
                    $data->$key = recursion_unserialize($val);
                }
            }
            return $data;
        }
    }
    return $ss;
}

echo json_encode(recursion_unserialize($test));
{
    "cart": {
        "bef40f55e8ec1e2d878b9c8157c4277b": {
            "key": "bef40f55e8ec1e2d878b9c8157c4277b",
            "product_id": 37075,
            "variation_id": 0,
            "variation": [],
            "quantity": 1,
            "data_hash": "b5c1d5ca8bae6d4896cf1807cdf763f0",
            "line_tax_data": {
                "subtotal": {
                    "1": 0.21
                },
                "total": {
                    "1": 0.21
                }
            },
            "line_subtotal": 1,
            "line_subtotal_tax": 0.21,
            "line_total": 1,
            "line_tax": 0.21
        }
    },
    "cart_totals": {
        "subtotal": "1.00",
        "subtotal_tax": 0.21,
        "shipping_total": "0.00",
        "shipping_tax": 0,
        "shipping_taxes": [],
        "discount_total": 0,
        "discount_tax": 0,
        "cart_contents_total": "1.00",
        "cart_contents_tax": 0.21,
        "cart_contents_taxes": {
            "1": 0.21
        },
        "fee_total": "0.00",
        "fee_tax": 0,
        "fee_taxes": [],
        "total": "1.21",
        "total_tax": 0.21
    },
    "applied_coupons": [],
    "coupon_discount_totals": [],
    "coupon_discount_tax_totals": [],
    "removed_cart_contents": [],
    "wc_notices": null,
    "customer": {
        "id": "0",
        "date_modified": "",
        "postcode": "",
        "city": "",
        "address_1": "",
        "address": "",
        "address_2": "",
        "state": "M",
        "country": "ES",
        "shipping_postcode": "",
        "shipping_city": "",
        "shipping_address_1": "",
        "shipping_address": "",
        "shipping_address_2": "",
        "shipping_state": "M",
        "shipping_country": "ES",
        "is_vat_exempt": "",
        "calculated_shipping": "",
        "first_name": "",
        "last_name": "",
        "company": "",
        "phone": "",
        "email": "",
        "shipping_first_name": "",
        "shipping_last_name": "",
        "shipping_company": ""
    }
}