PHP对数组中使用的数据进行非序列化-字符串中的非标准字符


PHP Unserialize data for use in array - sub standard characters in string

我使用的是嵌套表单的jQuery插件,并使用serialize(通过JS实现)将这些表单的顺序存储在数据库中。一旦我从数据库中检索到这些数据,我就需要能够将其取消序列化,以便可以使用每一条数据。

是序列化和存储数据的一个例子

[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]

每个序列化数据中存储的ID数量各不相同,JS插件在序列化前后添加了[和]括号。

我用过http://www.unserialize.com/测试数据的非序列化,并使用printr证明它是成功的。我已经尝试用以下代码复制它:

<?php
print_r(unserialize('[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]'));
?>

但我犯了一个错误。我猜我需要使用类似于strip_tag的东西来删除括号,但我不确定。给出的错误如下

Notice: unserialize(): Error at offset 0 of 70 bytes

一旦我有了未序列化的数据,我需要能够将每个ID用作变量,并且我假设要这样做,我需要做一些事情:

<?php
$array = unserialize('[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]');
foreach($array as $key => $val)
{
    // Do something here, use each individial ID however
    // e.g database insert using $val['id']; to get H592736029375 then K235098273598 and finally B039571208517
}
?>

是否有人能够提供任何关于如何正确剥离序列化数据的帮助,以便在数组中准备好ID,然后在foreach函数中使用?

非常感谢。

PHP的serialize()unserialize()函数是特定于PHP的,不用于与其他语言通信。

看起来JS序列化函数实际上是在生成JSON,所以在PHP方面,使用json_decode()而不是取消序列化。

这是一把小提琴

$data = '[{"id":"H592736029375"},{"id":"K235098273598"},{"id":"B039571208517"}]';
$array = json_decode($data, true);
foreach($array as $index=>$data){
    echo "$index) {$data['id']}'n";
}

输出:

0) H592736029375 
1) K235098273598 
2) B039571208517