php 使用反序列化函数 serialize 是返回 false 的一个可能原因

       今晚在使用反序列化函数是一直返回 false,不知所以,还以为是 '<' 标签的缘故,结果一百度,说可能是长度没对上,结果我一数,果然是,更正后,测试反序列化函数就返回成功的结果了。下面记录一下:

例子:

a:6:{a:1:{s:4:"file";s:78:"导入模板,<a target="_blank" href="/edu/excel/export_user.xls">点击下载</a>";}}

原来字母 s 后面紧跟的数字是后面内容的长度,且必须计算准确,不然就会出现上述问题,这里主要错在 s:78这个,

我数完字符数是 58(不包括中文字符),接着你自己主要你数据库或文件使用的编码是 utf-8 还是其他,再来计算中文

所占的字节数,我这里是 utf-8 ,所以按一个中文字符占 3 个字节计算,8个中文字符*3byte=24byte

则一共长度为 s = 58+24 = 82.修正如下:

a:6:{a:1:{s:4:"file";s:82:"导入模板,<a target="_blank" href="/edu/excel/export_user.xls">点击下载</a>";}}

字符在不同编码下所占字节数如下:(以下内容原文链接:link

英文字母和中文汉字在不同字符集编码下的字节数
英文字母:
字节数 : 1;编码:GB2312

字节数 : 1;编码:GBK

字节数 : 1;编码:GB18030

字节数 : 1;编码:ISO-8859-1

字节数 : 1;编码:UTF-8

字节数 : 4;编码:UTF-16

字节数 : 2;编码:UTF-16BE

字节数 : 2;编码:UTF-16LE


中文汉字:
字节数 : 2;编码:GB2312

字节数 : 2;编码:GBK

字节数 : 2;编码:GB18030

字节数 : 1;编码:ISO-8859-1

字节数 : 3;编码:UTF-8

字节数 : 4;编码:UTF-16

字节数 : 2;编码:UTF-16BE

字节数 : 2;编码:UTF-16LE

~晚安~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值