unserialize(): Error at offset出现的原因分析以及解决方法
2018-01-23 15:30
1446 查看
出现问题: 从数据库中取出数据后进行反序列化后,php报错 unserialize(): Error at offset xx of xx bytes;
分析原因:英文数据中含有中文字符串,所以我们就可以想到编码的问题,serialize()函数对在不同编码下对中文的处理结果是不一样的。
再讲gbk转换成utf8的格式后,每个中文的自己数从2个会增加到3个,所以会导致反序列化的时候判断字符长度出现问题
解决方法 : 使用正则表达式将序列化的数组中的表示字符长度的值重新计算一遍
具体代码:php5.5以下 :
但是由于PHP本身 /e模式的漏洞,php5.5+,已经废弃了这种用法
PHP 5.5+
分析原因:英文数据中含有中文字符串,所以我们就可以想到编码的问题,serialize()函数对在不同编码下对中文的处理结果是不一样的。
再讲gbk转换成utf8的格式后,每个中文的自己数从2个会增加到3个,所以会导致反序列化的时候判断字符长度出现问题
解决方法 : 使用正则表达式将序列化的数组中的表示字符长度的值重新计算一遍
具体代码:php5.5以下 :
function mb_unserialize($str) { $out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $str ); return unserialize($out); }
但是由于PHP本身 /e模式的漏洞,php5.5+,已经废弃了这种用法
PHP 5.5+
function mb_unserialize($str) { return preg_replace_callback('#s:(\d+):"(.*?)";#s',function($match){return 's:'.strlen($match[2]).':"'.$match[2].'";';},$str); }
相关文章推荐
- unserialize(): Error at offset 0 of 96 bytes出现的原因分析以及解决方法
- unserialize(): Error at offset出现的原因分析以及解决方法
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3
- PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3.5的详细分析及安装过程
- [php错误]PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法
- PHP中Notice: unserialize(): Error at offset 109 of 615 bytes in on line 的解决方法
- Notice: unserialize() [function.unserialize]: Error at offset解决方法
- MySQL 出现 java.sql.SQLException 之 Got error 28 from storage engine 问题分析以及解决方法
- [php错误]PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3
- linux服务器出现严重故障后的原因以及解决方法
- PHP出现Notice: unserialize() [function.unserialize]: Error at offset问题的解决方案
- PHP出现Notice: unserialize() [function.unserialize]: Error at offset问题的解决方案
- Error: initial value of reference to non const must be lvalue 原因以及解决方法
- win7系统开机出现蓝屏代码0x00000f4的原因分析及解决方法
- 关于Android Force Close 出现的原因 以及解决方法
- PHP出现Notice: unserialize() [function.unserialize]: Error at offset问题的解决方案
- mysql unauthenticated user原因分析以及解决方法
- Visual Studio 2010出现error LNK1123 以及 mfc100ud.dll丢失的解决方法