序列化&反序列化函数

时间:2014-02-19 07:44:35

标签: javascript php serialization

我有一个数组,我正在使用serialize转换为字符串:

$.ajax({
    url: "admin/adminProccess.php",
    type: "get",
    data: $('#idPriv:checked').serialize().replace(/http%3A%2F%2F/g,'#http#')  + '&str=' + 'deleteAdmin',
    success: function(data) {

当代码发送到php页面时,格式为:

443d77a90e9eb5524fd4e305eb263885:0

所以,我使用unserialize函数返回一个数组。但我不知道为什么我会得到错误的回应;

这是我在php页面中使用的代码:

for ($i=0;$i<count($idPriv);$i++){
    $test=$_GET['idPriv'][$i];

    $test  = unserialize($test);;
    var_dump($test);
}

我做错了吗?我

2 个答案:

答案 0 :(得分:3)

来自jQuery's manual on serialize:

  

将表单序列化为可以在Ajax请求中发送到服务器的查询字符串。

所以它的作用是获取一些表单值并将它们转换为查询字符串,如

single=Single&multiple=Multiple&multiple=Multiple3

来自PHP Manual on unserialize:

  

从存储的表示

创建PHP值

存储的表示形式是PHP独有的,看起来像这样:

O:1:"a":1:{s:5:"value";s:3:"100";}

换句话说,您正在尝试反序列化查询字符串,而PHP只能反序列化使用PHP serialize序列化的字符串。

话虽如此,在PHP中解析查询字符串的函数将是

PHP手册中的摘要示例:

$str = "first=value&arr[]=foo+bar&arr[]=baz"; 
parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

答案 1 :(得分:1)

序列化是一种特定于环境的过程。如果您使用Java / PHP / JavaScript / ...序列化某些内容,那么它只能使用相同的环境进行反序列化(至少,这是您应该期望的)。

最好的想法是将对象序列化为众所周知的格式,例如JSON。然后,您可以在JavaScript中执行以下操作:

JSON.stringify(myObject);

在PHP中:

<?php
    json_decode(myJson);
?>

当然你可以选择其他格式(XML,逗号分隔,查询字符串......),主要线索是你需要序列化/反序列化为两种环境都可以使用的语言。 JSON可能是最明显的一个(在查询字符串旁边)。