今晚在使用反序列化函数是一直返回 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
~晚安~