网站首页 > 技术文章 正文
1. 介绍
1.1 介绍
福哥在用Python去读PHP语言开发的项目的数据库的时候,发现一些字段里存储的居然是经过PHP的serialize函数序列化过的数据,这个要解开它通过json库是不行的了,怎么办呢?
原来Python专门有个库用来模拟PHP语言的serialize和unserialize的功能,它就是phpserialize库。
2. 安装
phpserialize库可以直接通过pip进行安装。
pip3 install phpserialize
3. 使用
3.1 序列化
使用phpserialize库序列化一个结构转化为一个字符串用到的是dumps方法,用法和json库类似,区别是编码参数不是encoding是charset。
user = {
'id': 35,
'name': "福哥",
'abilities': [
"PHP",
"Java",
"Python",
"JavaScript",
"C/C++",
"Asp.net"
]
}
print("原始数据:")
print(user)
print("序列化数据:")
userSN = phpserialize.dumps(user, charset="utf-8")
print(userSN)
可以看到序列化的结果和PHP的serialize基本一致。因为福哥设置的编码的UTF-8的,所以“福哥”占用了6个字符。
4. 反序列化
使用phpserialize库反序列化一个序列化字符串得到原始数据结构用的是loads方法,用法和json库基本一样,同样编码参数也是charset而不是我们想象的encoding。
userSN = b"a:3:{s:2:\"id\";i:35;s:4:\"name\";s:6:\"\xe7\xa6\x8f\xe5\x93\xa5\";s:9:\"abilities\";a:6:{i:0;s:3:\"PHP\";i:1;s:4:\"Java\";i:2;s:6:\"Python\";i:3;s:10:\"JavaScript\";i:4;s:5:\"C/C++\";i:5;s:7:\"Asp.net\";}}"
print("序列化数据:")
print(userSN)
print("原始数据:")
user = phpserialize.loads(userSN, charset="utf-8")
print(user)
反序列化的时候最好也加上编码参数,避免以默认编码反序列化出现错误的情况。
5. 总结
福哥今天带着童鞋们学习了Python的phpserialize库的使用方法,通过phpserialize库可以让Python语言拥有解析PHP的序列化数据的能力。
https://m.tongfu.net/home/35/blog/513411.html
猜你喜欢
- 2024-11-11 php+json+mysql实现前后端分离(php vue前后端分离)
- 2024-11-11 PHP中json解析失败原因, json_decode返回null解析失败原因
- 2024-11-11 如何使php的数组传递到js中(如何使php的数组传递到js中)
- 2024-11-11 Python操作JSON格式数据的技巧(python解析json数据)
- 2024-11-11 Linux(centos)用yum方式安装php最新版
- 2024-11-11 PHP 8.3 正式发布!(php8.0新功能)
- 2024-11-11 使用json_encode打印中文字符并且格式化(php代码)
- 2024-11-11 PhpStorm 2022.2 已发布(phpstorm2018)
- 2024-11-11 你不知道的PHP 8.3版本和它的一些有趣的变化
- 2024-11-11 通过WordPress HTTP API 获取json内容并解析
- 1508℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 520℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 491℃MySQL service启动脚本浅析(r12笔记第59天)
- 470℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 468℃启用MySQL查询缓存(mysql8.0查询缓存)
- 448℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 427℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 424℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)