修复图标显示不出来;标题改XX反馈系统;图标去掉背景色
一、图标显示不出来(根因) 用户上传图标时用的是修复前的代码,数据库里 icon_key 存的是 icons/2026/11/xxx.png —— 没有 local/ 也没有 oss.prefix 前缀。 上一轮我把键校验收紧成「必须带存储前缀」,于是这些键被判非法, fb_icon_url() 返回空字符串,图标自然显示不出来。 而三个文件其实都真实存在于 OSS 上(13KB / 391KB / 379KB)。 修法两层: 1. fb_icon_key_ok / fb_icon_is_key 兼容历史无前缀形态, 这些是有效资产,不能因为键格式不规范就让图标消失 2. 数据迁移:把对象复制到 feedlite/icons/… 并把数据库键改成规范形态, 已对三个软件全部执行并验证(新键 200,大小与源文件一致) 二、标题改为「XX 反馈系统」 - 页头大标题 = 同步日历反馈系统(之前只有「同步日历」) - 浏览器标签同步改 - 软件名本身含「反馈」时不叠加,避免「轻反馈反馈系统」 三、图标不要背景色 - 去掉色块底衬与圆角投影,直接「图标 + 文字」并排 - 前端 badge、提交页上下文条、邮件头部三处同步 - md 尺寸调到 28px,与 26px 标题文字视觉匹配 验证:三个软件页标题正确、图标全部 200 image/png、 全部页面 200、迁移后新键可读且大小一致。
This commit is contained in:
+15
-5
@@ -184,9 +184,13 @@ function fb_icon_allowed_ext() {
|
||||
return ['png', 'jpg', 'jpeg', 'webp'];
|
||||
}
|
||||
|
||||
/** 这个键是不是软件图标(local/icons/… 或 <prefix>/icons/…) */
|
||||
/**
|
||||
* 这个键是不是软件图标。
|
||||
* 同时认正常形态(local/icons/… 、<prefix>/icons/…)与历史形态(icons/…)。
|
||||
* 历史形态必须认,否则用户早先上传、仍存在桶里的图标就成了读不到的孤儿。
|
||||
*/
|
||||
function fb_icon_is_key($key) {
|
||||
return (bool)preg_match('#^(?:local|[A-Za-z0-9][A-Za-z0-9._-]*)/icons/#', (string)$key);
|
||||
return (bool)preg_match('#^(?:(?:local|[A-Za-z0-9][A-Za-z0-9._-]*)/)?icons/#', (string)$key);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -208,8 +212,13 @@ function fb_icon_make_key($ext) {
|
||||
|
||||
/**
|
||||
* 图标键是否合法。
|
||||
* 与 fb_upload_key_ok 分开写:图标键在附件键的基础路径里多一段 icons/,
|
||||
* 塞进原函数会被判为不合法。
|
||||
* 接受两种形态:
|
||||
* ① 正常形态:<local|oss.prefix>/icons/YYYY/MM/<16hex>.<ext>
|
||||
* ② 历史形态:icons/YYYY/MM/<16hex>.<ext>(无存储前缀)
|
||||
* —— 2026-11-03 之前的代码把键硬编码成这种样子,用户当时上传的图
|
||||
* 真实存在于桶根下的 icons/ 目录。这些对象是有效资产,
|
||||
* 不能因为键「格式不规范」就让图标显示不出来,所以这里认它。
|
||||
* 新写入一律走正常形态,见 fb_icon_make_key()。
|
||||
*
|
||||
* 🔴 扩展名必须是白名单里的图片类型,不能只写 `[a-z0-9]{2,5}` ——
|
||||
* 那样 `.php`(3 个字母)也会通过,等于给自己留了个写脚本的口子。
|
||||
@@ -219,7 +228,8 @@ function fb_icon_key_ok($key) {
|
||||
$key = (string)$key;
|
||||
if (strlen($key) < 16 || strlen($key) > 200) { return false; }
|
||||
if (strpos($key, '..') !== false || strpos($key, '//') !== false) { return false; }
|
||||
if (!preg_match('#^(?:local|[A-Za-z0-9][A-Za-z0-9._-]*)/icons/\d{4}/\d{2}/[a-f0-9]{16}\.([a-z0-9]{2,5})$#', $key, $m)) {
|
||||
// 带存储前缀,或历史无前缀形态
|
||||
if (!preg_match('#^(?:(?:local|[A-Za-z0-9][A-Za-z0-9._-]*)/)?icons/\d{4}/\d{2}/[a-f0-9]{16}\.([a-z0-9]{2,5})$#', $key, $m)) {
|
||||
return false;
|
||||
}
|
||||
return in_array(strtolower($m[1]), fb_icon_allowed_ext(), true);
|
||||
|
||||
Reference in New Issue
Block a user