【问题标题】:unserialize array and keep labels反序列化数组并保留标签
【发布时间】:2014-08-01 07:18:00
【问题描述】:

我有一个在 jQuery 中序列化的(表单数据)数组,我想在 PHP 中反序列化。

序列化数据样本:

biztv_contentmanagementbundle_contenttype%5Btitle%5D=test&biztv_contentmanagementbundle_contenttype%5Bduration%5D%5Bhour%5D=0&biztv_contentmanagementbundle_contenttype%5Bduration%5D%5Bminute%5D=0&biztv_contentmanagementbundle_contenttype%5Bduration%5D%5Bsecond%5D=10&container=5&module=2&template=27&data_6=%3Cdiv+id%3D%22object_01%22+class%3D%22object_textbox%22+namn%3D%22object_01%22+style%3D%22z-index%3A+1%3B+font-family%3A+Arial%3B%22%3E%3Cdiv+class%3D%22object_inner%22+style%3D%22border%3A+1.1500000953674316px+solid+rgb(0%2C+0%2C+0)%3B+border-top-left-radius%3A+100%25%3B+border-top-right-radius%3A+100%25%3B+border-bottom-right-radius%3A+100%25%3B+border-bottom-left-radius%3A+100%25%3B+cursor%3A+move%3B+color%3A+rgb(0%2C+0%2C+0)%3B+background-color%3A+rgb(255%2C+255%2C+255)%3B%22%3Etest%3C%2Fdiv%3E%3C%2Fdiv%3E&data_0=transparent&data_1=&data_2=0&data_3=repeat&data_4=left&data_5=top&data_7=original&serialized=biztv_contentmanagementbundle_contenttype%255Btitle%255D%3Dtest%26biztv_contentmanagementbundle_contenttype%255Bduration%255D%255Bhour%255D%3D0%26biztv_contentmanagementbundle_contenttype%255Bduration%255D%255Bminute%255D%3D0%26biztv_contentmanagementbundle_contenttype%255Bduration%255D%255Bsecond%255D%3D10%26container%3D5%26module%3D2%26template%3D27%26data_6%3D%26data_0%3Dtransparent%26data_1%3D%26data_2%3D0%26data_3%3Drepeat%26data_4%3Dleft%26data_5%3Dtop%26data_7%3Doriginal%26serialized%3D%26biztv_contentmanagementbundle_contenttype%255B_token%255D%3D673914147a45cdf5d66d9dc97cdb0a2b61e6d3ae%26biztv_contentmanagementbundle_contenttype%255Bhour_start%255D%255Bhour%255D%3D%26biztv_contentmanagementbundle_contenttype%255Bhour_start%255D%255Bminute%255D%3D%26biztv_contentmanagementbundle_contenttype%255Bhour_end%255D%255Bhour%255D%3D%26biztv_contentmanagementbundle_contenttype%255Bhour_end%255D%255Bminute%255D%3D%26biztv_contentmanagementbundle_contenttype%255Bdate_start%255D%3D%26biztv_contentmanagementbundle_contenttype%255Bdate_end%255D%3D&biztv_contentmanagementbundle_contenttype%5B_token%5D=673914147a45cdf5d66d9dc97cdb0a2b61e6d3ae&biztv_contentmanagementbundle_contenttype%5Bhour_start%5D%5Bhour%5D=&biztv_contentmanagementbundle_contenttype%5Bhour_start%5D%5Bminute%5D=&biztv_contentmanagementbundle_contenttype%5Bhour_end%5D%5Bhour%5D=&biztv_contentmanagementbundle_contenttype%5Bhour_end%5D%5Bminute%5D=&biztv_contentmanagementbundle_contenttype%5Bdate_start%5D=&biztv_contentmanagementbundle_contenttype%5Bdate_end%5D=

目前我正在这样做:

parse_str($serialized,$dataArray);
    foreach($dataArray as $i) {
        var_dump($i);
        echo "<br /><br />";
    }

问题是我丢失了所有标签,结果数组只包含值。在我的情况下,我想循环数据并根据标签名称对每个值做不同的事情(这是一种 API,所以我并不总是知道我的表单会出现什么标签,所以我需要循环遍历它们)。

关于这个类似的问题 (How do I PHP-unserialize a jQuery-serialized form?) 我找到了这个解决方案,这是完成我需要的唯一/最好的方法吗?

function unserializeForm($str) {
    $returndata = array();
    $strArray = explode("&", $str);
    $i = 0;
    foreach ($strArray as $item) {
        $array = explode("=", $item);
        $returndata[$array[0]] = $array[1];
    }

    return $returndata;
}

【问题讨论】:

  • 你能在这里发布你序列化数据的jQuery吗?
  • 改为添加结果数据
  • 你在 jQuery 调用中使用 data:{ content: content } 吗?
  • 序列化的表单不通过ajax传递,序列化的字符串存储在隐藏的表单字段中,并在标准同步表单提交中传递。

标签: php jquery arrays serialization


【解决方案1】:

这是我最终使用的,我在这里找到的被盗 unserializeForm 的修改版本 How do I PHP-unserialize a jQuery-serialized form? 信用到 https://stackoverflow.com/users/1061944/murtaza-hussain

private function unserializeForm($str) {
    $returndata = array();
    $strArray = explode("&", $str);
    $i = 0;
    foreach ($strArray as $item) {
        $item = explode("=", $item);
        $returndata[$i][0] = $item[0];
        $returndata[$i][1] = $item[1];
        $i++;
    }

    return $returndata;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多