You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cookie书签条目数统计异常:空Cookie返回1而非0问题咨询

Cookie为空时sizeof返回1的原因与解决方案

这个问题我之前也碰到过,核心原因是PHP里explode()函数对空字符串的处理逻辑和咱们直觉不一样😉

为什么会出现这个现象?

当你调用explode(",", "")时,PHP并不会返回一个空数组,而是返回一个包含单个空字符串元素的数组。你可以用var_dump()验证一下:

var_dump(explode(",", ""));
// 输出:array(1) { [0]=> string(0) "" }

所以当你的Cookie存在但内容为空时,$_COOKIE['Bookmark']是空字符串,explode后得到的数组长度是1,sizeof()自然返回1,最终输出<span>1</span>。

解决方法

这里有几种靠谱的处理方式,你可以根据场景选择:

  1. 先判断Cookie内容是否非空
    在处理之前先检查Cookie的值是否为空,避免对空字符串执行explode:
if(isset($_COOKIE['Bookmark']) && !empty($_COOKIE['Bookmark'])) { 
    $sAds = explode(",", $_COOKIE['Bookmark']); 
    $countSAds = sizeof($sAds); 
    $savedAds = '<span>'.$countSAds.'</span>'; 
} else { 
    $savedAds = ''; 
}
  1. 过滤数组中的空元素
    如果担心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 = ''; 
}
  1. 用正则分割忽略空元素
    使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:47:29