php 在utf8和gbk编码下使用serialize和unserialize互相序列化和反序列化会出现无法成功反序列化的问题。
问题出现的原因主要是在不同编码下strlen函数计算中文字符串长度不同的原因。
| 代码如下 | 复制代码 |
|
$array=array('title'=>'php教程分享网','url'=>'https://www.111cn.net'); echo serialize($array); //gbk编码 a:2:{s:5:"title";s:13:"php教程分享网";s:3:"url";s:20:"https://www.111cn.net";} //utf8编码 a:2:{s:5:"title";s:18:"php教程分享网";s:3:"url";s:20:"https://www.111cn.net";} ?> |
|
要解决这个问题就要在反序列化的时候重新修正字符串的长度。
解决方案
| 代码如下 | 复制代码 |
|
$str='a:2:{s:5:"title";s:13:"php教程分享网";s:3:"url";s:20:"https://www.111cn.net";}'; $str = preg_replace_callback( $regex , "fixser", $str); function fixser($matches) { return 's:'.strlen($matches[2]).':'.'"'.$matches[2].'"'; } ?> |
|
可以改成匿名函数
| 代码如下 | 复制代码 |
|
$str='a:2:{s:5:"title";s:13:"php教程分享网";s:3:"url";s:20:"https://www.111cn.net";}'; $str = preg_replace_callback( ?> |
|
疯狂医院达什医生中文版(Crazy Hospital)
疯狂医院达什医生最新版是一款医院模拟经营类游戏,逼真的场景画
宝宝庄园官方版
宝宝庄园官方版是一款超级经典好玩的模拟经营类型的手游,这个游
桃源记官方正版
桃源记是一款休闲娱乐类的水墨手绘风格打造的模拟经营手游。玩家
长途巴士模拟器手机版
长途巴士模拟器汉化版是一款十分比真好玩的大巴车模拟驾驶运营类
房东模拟器最新版2024
房东模拟器中文版是一个超级有趣的模拟经营类型的手游,这个游戏