• v1.3.7 a82fe4ac21

    TBlog v1.3.7 Stable

    zhangpu released this 2026-06-03 11:18:12 +08:00 | 0 commits to main since this release

    TBlog v1.3.7

    🔄 改进

    • 访问不存在的页面自动跳转首页:之前访问不存在的文章 / 分类 / 标签 / 路径会显示"文章不存在"的白屏文案,现在统一 302 跳转到首页
      • 覆盖所有 6 个主题:flow / paper / clay / magine / chirp / zhangpu
      • 覆盖 post / category / tag 三种内容页
      • 覆盖路由器兜底 404
      • 后台 404 保持原样(避免误跳转影响后台使用)
    • 新增全局函数 redirect_home(),headers 已发送时有 meta refresh + JS 兜底

    🐛 Bug 修复(合入自 v1.3.6 修复)

    • 修复后台删除文章提示 "CSRF token mismatch":csrf_verify('BOTH') 现在会认可查询参数里的 csrf_token(GET 链接删除场景)。同时给分类删除按钮补上了 CSRF token(之前分类删除是裸 GET,有安全风险)。
    • 修复 URL 别名带空格/特殊字符时文章/分类/标签 404 的问题:
      • 后台保存文章/分类时,别名会经过 sanitize_slug() 清理:空白、%20、+、连续特殊字符统一替换成单个 -,首尾 - 去掉,ASCII 自动小写
      • 路由器收到请求后对路径段做 rawurldecode(),老数据库里已经存了带空格别名的文章也能立即访问
      • 所有主题输出链接时用 slug_url() 做 URL 编码,中文别名 / 带空格别名的链接都不再损坏
    • 修复"检查更新失败"和"备份失败,已中止升级":
      • 升级接口多端点容错(tblog.cn / www.tblog.cn / update.json)
      • 升级前先检查 backups/ 目录存在且可写,不行就尝试自动创建
      • 备份失败时返回具体错误原因(PHP 缺少 ZipArchive / 目录不可写 / zip 为空),不再笼统报错
    • 修复旧版升级后所有文章详情页 500(Call to undefined function is_licensed()):保留兼容 shim,已删除模板中的"未授权徽章"

    🔧 开发者

    • 新增全局函数 sanitize_slug($slug)、slug_url($slug)、redirect_home()
    • generate_slug() 重构为基于 sanitize_slug()
    • csrf_verify('BOTH') 现在会读 $_GET['csrf_token']
    • 升级接口支持多镜像 fallback,可在 config.php 中通过 TBLOG_UPDATE_API 覆盖

    ⚠️ 升级说明

    • 老别名(含空格)不用改,升级后自动通过路由解码访问
    • 想彻底清理:编辑文章/分类再保存一次,会自动走新的清理逻辑
    • 升级前确保站点根目录的 backups/ 目录存在且 PHP 可写(v1.3.7 会自动尝试创建)
    Downloads