piapia123
zh

URL Slug 生成

网络

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

「转小写再把空格换成连字符」这句话看起来就够了,但真正的 slug 生成器要处理四件它做不到的事:变音符号(`Café Zürich` 该是 `cafe-zurich`,而不是把 `é` 当分隔符丢掉的 `caf-z-rich`)、连续分隔符(`Hello World!` 不该出现两个连字符)、长度上限(太长会被 CMS 按自己的规则截,截在哪里不由你决定)、以及中文。 中文这一条单独给了选项,因为三种做法都自圆其说:转拼音(`ni-hao-shi-jie`)可读可输入、原样保留在现代浏览器与搜索引擎里都能用、丢掉只在中文是附注时才合理。默认取拼音 —— 它是中文站点里最常见的做法。 一次可以粘多个标题,一行一个,每行各自产出一个 slug。全部在浏览器本地完成,标题不外传。

功能

  • 去变音符号用 Unicode 分解(NFD)而不是手写替换表,越南语这类叠加记号多的文字也能覆盖
  • 中文三种做法可选:转拼音、原样保留、直接丢掉;中英混排时两边都在、顺序不变
  • 连续分隔符合成一个,首尾不留 —— 不会出现 `hello--world` 或结尾多一个连字符
  • 按词截断到指定长度,不会切在单词中间(`how-to-deploy-a-static-site` 截到 16 是 `how-to-deploy-a`)
  • 非 ASCII 文字(西里尔、希腊、阿拉伯、泰文)默认当分隔符丢掉,不会留下 `%D0%9F…` 这种读不了的串
  • 一次多行,每行一个 slug,逐行可复制
  • 分隔符可换成下划线,适合 snake_case 风格的站点
  • 大小写可保留(`Hello-World` 而不是 `hello-world`)

使用方法

  1. 一行一个标题粘进来,中英混排也可以
  2. 按站点习惯选中文处理方式与分隔符
  3. 需要控长就填长度上限,工具会按词截断
  4. 点行末复制,或整块复制全部结果

常见问题

中文该转拼音还是原样保留?
两种都能用,看你的站点和你自己怎么想。转拼音(`ni-hao-shi-jie`)可读、可输入、在任何老系统里都不会出问题,是中文站点最常见的做法;原样保留(`你好世界`)在地址栏里会显示成 `%E4%BD%A0%E5%A5%BD…`,但复制、分享、搜索引擎都完全正常,现代浏览器还会把它显示回汉字。唯一要避开的场合是「这条 URL 会被贴进老系统的日志或邮件」—— 那种环境里百分号编码的串既难读又常被截断。
为什么 `Øre` 变成了 `re`,而 `Öre` 能变成 `ore`?
因为 `Ö` 是一个「基字母 + 组合记号」的写法,Unicode 分解能把它拆成 `O` 和那个小点,去掉记号就得到 `O`。而 `Ø`(U+00D8)是一个独立的字母,它身上没有可以拆掉的记号,分解之后还是 `Ø` —— 于是被当作非 ASCII 丢掉。这是这类工具的真实边界,不是 bug:想留住它只能手写一张例外表,而那张表永远补不全。
长度限制为什么不是直接砍到第 N 个字符?
因为砍在单词中间得到的是一段读不出来的碎片(`how-to-deplo`)。所以这里按词截断:能放几个完整的词就放几个,放不下整个词就丢掉那个词。只有一种例外 —— 上限比第一个词还短,那时没有完整的词可放,只能把第一个词硬截一段(`how-to-deploy` 截到 2 是 `ho`),否则结果就是一个空串。
下划线和连字符该用哪个?
两种搜索引擎都认,但连字符是绝大多数站点与博客系统的默认选择,也是 Google 明确说过会把 `-` 当词分隔符的写法。下划线更适合本来就用 snake_case 的场合(比如一类文件名或旧式 CMS 的路径),保持站内一致比选哪一个更重要。

相关工具