应用台导航页
  • 主页
  • 博客
  • 知识库
  • 工作台
  • 集萃
  • 友链
  • 关于
Next.js 的中文编码问题

Next.js 的中文编码问题

技术
更新于 2026-04-28
— 1730 字
返回

你现在的处境很典型:

  • 用 encodeURIComponent → Vercel ISR(Next.js)报 500
  • 用 base64 → 浏览器/路由不识别,路径错乱

原因:Vercel/Next.js 的 ISR 对 % 编码路径有解析 bug/限制,尤其在 getStaticPaths 和动态路由里很容易炸。下面给你一套在 Vercel ISR 下稳定可用、中文安全、能正常解码的方案,直接替换就能解决。


✅ 最佳方案:用「安全 Base64」(URL-safe Base64)

把中文转成 URL 安全的 Base64,不是普通 Base64,也不是 encodeURIComponent。

1. 编码(客户端 / 生成路径时)

js
// 中文 → URL-safe Base64
function encodeSafe(str) {
return Buffer.from(str, 'utf8')
.toString('base64')
.replace(/\+/g, '-') // + → -
.replace(/\//g, '_') // / → _
.replace(/=/g, ''); // 去掉末尾 =
}
// 广州 → 5bm_5bee5biC
console.log(encodeSafe('广州'));

2. 解码(Next.js 页面 / getStaticProps 里)

js
// URL-safe Base64 → 中文
function decodeSafe(encoded) {
let str = encoded.replace(/-/g, '+').replace(/_/g, '/');
// 补回末尾 =
while (str.length % 4) str += '=';
return Buffer.from(str, 'base64').toString('utf8');
}
// 5bm_5bee5biC → 广州
console.log(decodeSafe('5bm_5bee5biC'));

3. 为什么这个能解决 Vercel ISR 500

  • 没有 % → 不会触发 Vercel/Next.js 的编码解析 bug
  • 只有 a-z0-9-_ → 完全合法 URL 字符,ISR 静态路径生成稳定
  • 可逆、无乱码、无长度爆炸
  • 对比:
    • encodeURIComponent('广州') → %E5%B9%BF%E5%B7%9E(ISR 易炸)
    • 普通 Base64 → 5bm/5bee5biC(含 /,路由被当成文件夹)
    • URL-safe Base64 → 5bm_5bee5biC(完美)

✅ Next.js ISR 完整示例(App Router / Pages Router 都可用)

生成路径(比如 getStaticPaths)

js
// 假设 locations = [{ name: '广州' }, ...]
const paths = locations.map(loc => ({
params: { city: encodeSafe(loc.name) }
}));

页面里解码

js
// app/[city]/page.js
export default function Page({ params }) {
const cityName = decodeSafe(params.city);
return <div>{cityName}</div>;
}

✅ 备选方案(不想用 Base64 时)

如果不想用 Base64,可以用 encodeURI + 替换,但稳定性不如上面:

js
// 编码
const safe = encodeURI('广州').replace(/%/g, '_');
// _E5_B9_BF_E5_B7_9E
// 解码
const orig = decodeURI(safe.replace(/_/g, '%'));

✅ 总结(直接照做)

  1. 扔掉 encodeURIComponent(ISR 易 500)
  2. 扔掉普通 base64(含 /,路由错误)
  3. 用 URL-safe Base64:+→-、/→_、去掉 =
  4. 解码时还原即可

要不要我帮你把现有代码(生成链接 + 页面解码)直接改成这套安全方案,你复制就能用?

相关内容

  • 花野猫独立开发作品集网站

    花野猫独立开发作品集网站

    更新于2026-04-25

  • 备战高考计划 day6

    备战高考计划 day6

    更新于2026-04-24

  • 当我用新粗野主义风格,设计高校名录数据库

    当我用新粗野主义风格,设计高校名录数据库

    更新于2026-04-23

  • 求助:为什么谷歌无法访问我的 robots.txt

    求助:为什么谷歌无法访问我的 robots.txt

    更新于2026-04-22

  • 高考备战计划 day 5

    高考备战计划 day 5

    更新于2026-04-22

文章大纲

  • ✅ 最佳方案:用「安全 Base64」(URL-safe Base64)
    • 1. 编码(客户端 / 生成路径时)
    • 2. 解码(Next.js 页面 / getStaticProps 里)
    • 3. 为什么这个能解决 Vercel ISR 500
  • ✅ Next.js ISR 完整示例(App Router / Pages Router 都可用)
    • 生成路径(比如 getStaticPaths)
    • 页面里解码
  • ✅ 备选方案(不想用 Base64 时)
  • ✅ 总结(直接照做)

选项
文章 ID: 501

相关内容

  • 花野猫独立开发作品集网站

    花野猫独立开发作品集网站

    更新于2026-04-25

  • 备战高考计划 day6

    备战高考计划 day6

    更新于2026-04-24

  • 当我用新粗野主义风格,设计高校名录数据库

    当我用新粗野主义风格,设计高校名录数据库

    更新于2026-04-23

  • 求助:为什么谷歌无法访问我的 robots.txt

    求助:为什么谷歌无法访问我的 robots.txt

    更新于2026-04-22

  • 高考备战计划 day 5

    高考备战计划 day 5

    更新于2026-04-22

dors logoDors

Dors 是花野猫开发为知识工作者打造的数字花园应用,包含的博客、个人记事本、及其他实用功能。

花园

  • 花坛——博客
  • 果园——知识库

工坊——作者开发的实用工具

  • 小记
  • 秒切——一键按秒分割视频
  • 中国重点高校地理位置可视化网站
  • 中国行政区划数据查询平台
  • excel 重命名工具

misc

  • 生活章程
  • 画廊
  • just have fun!

© 2022 - present. All Rights Reserved.滇ICP备2025063395号-1

花野猫打造