php中序列化与反序列化详解
发布时间 - 2026-01-10 23:01:45 点击率:次把复杂的数据类型压缩到一个字符串中

serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
eg:
$stooges = array('Moe','Larry','Curly');
$new = serialize($stooges);
print_r($new);echo "<br />";
print_r(unserialize($new));
结果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}
Array ( [0] => Moe [1] => Larry [2] => Curly )
当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理:
$shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4);
echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'" rel="external nofollow" >next</a>';
margic_quotes_gpc和magic_quotes_runtime配置项的设置会影响传递到unserialize()中的数据。
如果magic_quotes_gpc项是启用的,那么在URL、POST变量以及cookies中传递的数据在反序列化之前必须用stripslashes()进行处理:
$new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启 $new_cart = unserialize($cart);
如果magic_quotes_runtime是启用的,那么在向文件中写入序列化的数据之前必须用addslashes()进行处理,而在读取它们之前则必须用stripslashes()进行处理:
$fp = fopen('/tmp/cart','w');
fputs($fp,addslashes(serialize($a)));
fclose($fp);
//如果magic_quotes_runtime开启
$new_cat = unserialize(stripslashes(file_get_contents('/tmp/cart')));
//如果magic_quotes_runtime关闭
$new_cat = unserialize(file_get_contents('/tmp/cart'));
在启用了magic_quotes_runtime的情况下,从数据库中读取序列化的数据也必须经过stripslashes()的处理,保存到数据库中的序列化数据必须要经过addslashes()的处理,以便能够适当地存储。
mysql_query("insert into cart(id,data) values(1,'".addslashes(serialize($cart))."')");
$rs = mysql_query('select data from cart where id=1');
$ob = mysql_fetch_object($rs);
//如果magic_quotes_runtime开启
$new_cart = unserialize(stripslashes($ob->data));
//如果magic_quotes_runtime关闭
$new_cart = unserialize($ob->data);
当对一个对象进行反序列化操作时,PHP会自动地调用其__wakeUp()方法。这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如:数据库连接等。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# php
# 序列化
# 反序列化
# JSON PHP中
# Json字符串反序列化成对象/数组的方法
# php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
# PHP 序列化和反序列化函数实例详解
# 解析PHP多种序列化与反序列化的方法
# PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
# 详解PHP序列化和反序列化原理
# 详解PHP序列化反序列化的方法
# PHP多种序列化/反序列化的方法详解
# PHP反序列化字符串逃逸实例详解
# 数据库中
# 放在
# 而在
# 建立起
# 情况下
# 必须要
# 以确保
# URL
# gt
# Array
# Bagel
# Plain
# href
# Lox
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
javascript读取文本节点方法小结
如何快速打造个性化非模板自助建站?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
Android仿QQ列表左滑删除操作
如何为不同团队 ID 动态生成多个“认领值班”按钮
C++用Dijkstra(迪杰斯特拉)算法求最短路径
微信小程序 scroll-view组件实现列表页实例代码
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Linux安全能力提升路径_长期防护思维说明【指导】
如何在阿里云香港服务器快速搭建网站?
再谈Python中的字符串与字符编码(推荐)
Android okhttputils现在进度显示实例代码
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何在万网主机上快速搭建网站?
高防服务器租用指南:配置选择与快速部署攻略
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Laravel怎么清理缓存_Laravel optimize clear命令详解
微信小程序 五星评分(包括半颗星评分)实例代码
bootstrap日历插件datetimepicker使用方法
浅析上传头像示例及其注意事项
如何快速生成专业多端适配建站电话?
Laravel中的withCount方法怎么高效统计关联模型数量
,网页ppt怎么弄成自己的ppt?
专业商城网站制作公司有哪些,pi商城官网是哪个?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
浅谈javascript alert和confirm的美化
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何用已有域名快速搭建网站?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Laravel如何使用Telescope进行调试?(安装和使用教程)
如何彻底删除建站之星生成的Banner?
香港服务器租用费用高吗?如何避免常见误区?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
,怎么在广州志愿者网站注册?
简单实现Android文件上传
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel如何使用Blade模板引擎?(完整语法和示例)
大同网页,大同瑞慈医院官网?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
进行网站优化必须要坚持的四大原则

