介绍

在用Python去读PHP语言开发的项目的数据库的时候,发现一些字段里存储的居然是经过PHP的serialize函数序列化过的数据,这个要解开它通过json库是不行的了,Python专门有个库用来模拟PHP语言的serialize和unserialize的功能,它就是phpserialize库。

安装

phpserialize库可以直接通过pip进行安装。

pip3 install phpserialize

使用

序列化

使用phpserialize库序列化一个结构转化为一个字符串用到的是dumps方法,用法和json库类似,区别是编码参数不是encoding是charset。

list= {
    'id': 1,
    'name': "names1",
    'abilities': [
        "PHP",
        "Java",
        "Python",
        "JavaScript",
        "C/C++",
        "Asp.net"
    ]
}

print("原始数据:")
print(list)

print("序列化数据:")
user_text = phpserialize.dumps(list, charset="utf-8")
print(user_text )

可以看到序列化的结果和PHP的serialize基本一致。

反序列化

使用phpserialize库反序列化一个序列化字符串得到原始数据结构用的是loads方法,用法和json库基本一样,同样编码参数也是charset而不是我们想象的encoding。

list= b'a:4:{s:2:"id";i:1;s:4:"name";s:6:"names1";s:3:"sex";i:1;s:7:"address";a:2:{i:0;s:28:"\xe6\xb2\xb3\xe5\x8c\x97\xe7\x9c\x81\xe4\xbf\x9d\xe5\xae\x9a\xe5\xb8\x82XX\xe8\xb7\xafXX\xe5\x8f\xb7";i:1;s:34:"\xe5\x86\x85\xe8\x92\x99\xe5\x8f\xa4\xe5\x91\xbc\xe4\xbc\xa6\xe8\xb4\x9d\xe5\xb0\x94\xe5\xb8\x82XX\xe8\xb7\xafXX\xe5\x8f\xb7";}}' print("序列化数据:") print(list) print("原始数据:") user_text = phpserialize.loads(list, charset="utf-8") print(user_text)