Cookie书签条目数统计异常:空Cookie返回1而非0问题咨询
这个问题我之前也碰到过,核心原因是PHP里explode()函数对空字符串的处理逻辑和咱们直觉不一样😉
为什么会出现这个现象?
当你调用explode(",", "")时,PHP并不会返回一个空数组,而是返回一个包含单个空字符串元素的数组。你可以用var_dump()验证一下:
var_dump(explode(",", "")); // 输出:array(1) { [0]=> string(0) "" }
所以当你的Cookie存在但内容为空时,$_COOKIE['Bookmark']是空字符串,explode后得到的数组长度是1,sizeof()自然返回1,最终输出<span>1</span>。
解决方法
这里有几种靠谱的处理方式,你可以根据场景选择:
- 先判断Cookie内容是否非空
在处理之前先检查Cookie的值是否为空,避免对空字符串执行explode:
if(isset($_COOKIE['Bookmark']) && !empty($_COOKIE['Bookmark'])) { $sAds = explode(",", $_COOKIE['Bookmark']); $countSAds = sizeof($sAds); $savedAds = '<span>'.$countSAds.'</span>'; } else { $savedAds = ''; }
- 过滤数组中的空元素
如果担心Cookie里有多余的逗号(比如,252,,190这种情况),可以用array_filter()过滤掉空元素后再统计:
if(isset($_COOKIE['Bookmark'])) { $sAds = explode(",", $_COOKIE['Bookmark']); // 过滤掉空字符串元素 $sAds = array_filter($sAds); $countSAds = sizeof($sAds); $savedAds = $countSAds > 0 ? '<span>'.$countSAds.'</span>' : ''; } else { $savedAds = ''; }
- 用正则分割忽略空元素
使用preg_split()并加上PREG_SPLIT_NO_EMPTY参数,分割时直接跳过空的部分:
if(isset($_COOKIE['Bookmark'])) { // 分割时自动忽略空元素 $sAds = preg_split('/,/', $_COOKIE['Bookmark'], -1, PREG_SPLIT_NO_EMPTY); $countSAds = sizeof($sAds); $savedAds = $countSAds > 0 ? '<span>'.$countSAds.'</span>' : ''; } else { $savedAds = ''; }
这些方法都能解决Cookie为空时显示错误数量的问题,同时还能兼容一些异常的Cookie格式~
内容的提问来源于stack exchange,提问作者Jack The Baker
相关产品推荐
相关产品推荐

