去除重音符号与生成 URL Slug
护照上的拼音姓名、邮箱地址、文件名和网页地址常常使用不带重音的字母。é 只要去掉符号即可,但越南语的 đ、土耳其语的 ı、德语的 ß、丹麦语的 ø 各有自己的写法。本指南介绍这些规则,以及如何把文章标题变成简洁的 URL slug。
带符号的字母有两类
大多数带重音的字母是基本字母加符号:é 是 e 加锐音符,ü 是 u 加分音符,越南语 ệ 是 e 加抑扬符和下点。Unicode 记录了每个字母如何分解,所以去掉符号就得到基本字母。同一个字母可以存成一个字符,也可以存成基本字母加单独的符号,两者看起来一样,去掉符号后的结果也一样。
而越南语的 đ、土耳其语的 ı、德语的 ß、丹麦语和挪威语的 ø 和 æ、冰岛语的 þ 并不是由基本字母加符号构成的,去掉符号后仍然不变,需要各自的写法。
护照的转写表
护照底部的机读区(MRZ)只使用 A 到 Z 的字母。国际护照规范 ICAO Doc 9303 中有一张表,规定各国字母在机读区的写法,可以作为不带重音书写的参考:
| 字母 | ICAO Doc 9303 | 语言 |
|---|---|---|
| É È Ê Ç Ñ | E E E C N | 法语、西班牙语、葡萄牙语等 |
| Ä Ö Ü | AE 或 A、OE 或 O、UE 或 U | 德语、瑞典语、土耳其语等 |
| ẞ(ß) | SS | 德语 |
| Đ | D | 越南语、克罗地亚语等 |
| Ğ Ş Ç İ I(ı) | G S C I I | 土耳其语 |
| Ø Æ Å | OE、AE、AA 或 A | 丹麦语、挪威语 |
| Ł Þ Œ | L、TH、OE | 波兰语、冰岛语、法语 |
越南语:声调符号和 đ
越南语字母可以带两种符号:改变元音的符号(ă、â、ê、ô、ơ、ư)和五个声调符号(huyền à、sắc á、hỏi ả、ngã ã、nặng ạ)。写成“không dấu”(无符号)时两种都去掉,并把 đ 写成 d:Nguyễn Văn Đức 写作 Nguyen Van Duc。只去声调(Nguyên Văn Đưc)时,懂越南语的人仍能分辨元音。
土耳其语:带点的 i 和不带点的 ı
土耳其语有四个 i:带点的 i 和 İ,不带点的 ı 和 I。不带符号书写时,ı 写作 i,İ 写作 I,ç、ğ、ö、ş、ü 去掉符号即可。要注意的是转小写:Unicode 的通用规则会把 İ 变成 i 加一个组合上点(U+0307),这个看不见的字符会混进文件名和网址。先把土耳其语字母换成基本字母,再转小写,结果就处处一致。
德语:ae、oe、ue 和 ss
德语在无法使用变音符时把 ä、ö、ü 写成 ae、oe、ue:Müller 写作 Mueller 而不是 Muller。对于 ß,德语正字法官方规则(Amtliches Regelwerk)第 25 条 E2 规定:无法使用 ß 时写作 ss(Straße → Strasse)。其他语言只是去掉两点,所以土耳其语的 Üsküdar 写作 Uskudar。
把标题变成 URL slug
slug 是网址中代表页面的那一段。好的 slug 简短、小写,单词之间用连字符连接:
| 标题 | Slug |
|---|---|
| Café & Crème Brûlée: 10 Tips | cafe-creme-brulee-10-tips |
| İstanbul'da Gezilecek Yerler | istanbulda-gezilecek-yerler |
| Öffnungszeiten & Preise(德语) | oeffnungszeiten-preise |
| Cách nấu phở bò Hà Nội | cach-nau-pho-bo-ha-noi |
- 用连字符,不用下划线。Google 的网址结构指南建议单词之间用连字符,并使用可读的单词而不是很长的 ID 编号。
- 删除撇号。don't 写成 dont,而不是 don-t。
- 带重音的网址会变长。浏览器能直接显示,但复制的链接会经过百分号编码:Google 的示例中 gemüse 变成 gem%C3%BCse。
- 已发布的 slug 不要随意修改。如果不设置从旧网址到新网址的永久重定向(301),原有链接就会失效。
中文标题的 slug
中文标题可以直接用汉字做 slug,也可以手动写一个拼音或英文 slug。直接用汉字时,地址栏显示中文,但复制的链接会变成 %E4%B8%AD… 这样的长串。把汉字自动转成拼音需要按词判断多音字,机械转换容易出错,所以手动写一个简短的拼音或英文 slug 更稳妥。
常见问题
Ä 应该写成 AE 还是 A?
护照转写表两种都允许。德语名字通常写 AE,土耳其语、芬兰语、瑞典语单词常写 A、O、U。以需要对照的证件上已有的写法为准。
slug 应该多长?
没有固定上限。保留描述页面的词,去掉其余的;许多内容管理系统也有自己的长度限制。
两段文字看起来一样,比较时却不相等,为什么?
可能一份把 é 存成一个字符,另一份存成 e 加组合重音符。去掉重音,或把两份文字规范化为同一种 Unicode 形式,就会相等。
名字不写重音算写错吗?
在护照机读区或旧的订票系统等不能使用重音的地方没有问题。能使用重音的地方,原本的拼写才是正确写法。