您的位置:首页 > 编程语言 > PHP开发

PHP unserialize出现Error at offset错误

2013-10-24 00:00 393 查看
首先来看看PHP unserialize为什么会出现Error at offset错误:
<?php
    //我的页面是UTF-8编码的结果为:a:2:{s:2:"en";s:21:"http://www.phpddt.com";s:2:"cn";s:6:"教程";}
    //我的页面是ANSI编码的结果为:a:2:{s:2:"en";s:21:"http://www.phpddt.com";s:2:"cn";s:4:"教程";}
    echo serialize(array('en'=>'http://www.phpddt.com','cn'=>'教程'));


从上很容易看出页面的编码不同,serialize的中文字符串的长度就不同,问题就出来了,如果你unserialize的时候字符串的长度大于实际字符串的长度,会报如下错误:
Notice: unserialize() [function.unserialize]: Error at offset
解决办法是你要对反序列的字符串进行一次转换:
function _unserialize($string)
{
    return unserialize(preg_replace('!s:(\d+):"(.*?)";!se', '"s:".strlen("$2").":\"$2\";"', $string));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐