php 反序列化 编码,WordPress中PHP编码问题导致反序列化函数unserialize失败的解决方法...

导语:叶子在迁移一个wordpress网站时,需要对数据重组,但由于部分数据使用的序列化格式存储,叶子需要将它们反序列化后添加到另外的地方,但是,在执行过程中遇到了函数unserialize返回值为假的问题。

unserialize失败的原因

由于编码格式的不同,有些字符在序列化计数的时候,虽然占用了一个字符的位置,但算作2个字符的长度,在php中反序列化的时候,由于计数的长度与字符串真实的长度不一致导致反序列化不成功。

解决方法

我们需要在php中重新计算字符的个数,摘抄实现代码如下:

$serial_str =$result->meta_value;

$serial_str = preg_replace_callback('/s:(\d+):"([\s\S]*?)";/', function($matches) {

return 's:'.strlen($matches[2]).':"'.$matches[2].'";';

}, $serial_str);

$meta_values = unserialize($serial_str);

第一行代码的意思是,将一个序列化字符串$result->meta_value赋值给变量$serial_str。

第二行代码的意思是,利用函数preg_replace_callback重新计算每个字符串的个数,其中使用了正则表达式。

第三行代码的意思是,字符串反序列化成为数组。

结束

你学会了吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值