维基百科ID含特殊字符时双HTML锚点使用及相关技术疑问
关于维基百科特殊字符锚点的技术疑问解答
1. 手动添加特殊字符锚点是为了兼容特定浏览器还是所有浏览器?
这主要是为了**兼容旧版本浏览器(比如IE8及更早)**以及一些老旧的内容解析工具、爬虫,而非所有浏览器。
现代浏览器(Chrome、Firefox、Edge等近10年的版本)已经完全支持在锚点中使用包含特殊字符或非ASCII字符的id,HTML5规范也放宽了对id属性的字符限制——只要不是空格、控制字符,基本都能正常识别。但维基百科保留这个手动添加锚点的做法,核心原因有两个:
- 历史遗留:早期HTML规范对
id的字符限制更严格,旧浏览器对非ASCII字符的锚点解析存在bug,比如无法正确识别带重音符号的字符锚点; - 最大兼容:仍有少量用户在使用老旧浏览器,或者一些爬虫、归档工具对特殊字符锚点的处理逻辑未更新,备用的URL编码锚点能确保这些场景下内容仍可正常跳转。
2. 内容Encres_.C3.A0_.C3.A9crire_et_dessiner采用的编码格式是什么?能否改用HTML实体替代?
编码格式解析
这个字符串用的是URL百分编码(Percent-Encoding),搭配下划线替换空格的变种:
.C3.A0是Unicode字符à的UTF-8字节(C3 A0)经过百分编码后的结果(通常百分编码是%C3%A0,这里用.替代了%,是维基百科内部的处理方式);.C3.A9对应Unicode字符é的UTF-8字节(C3 A9);- 下划线
_是用来替换原标题中的空格,替代了标准URL编码里的%20。
能否改用HTML实体替代?
答案是可以,但其实没必要,反而直接用Unicode字符更直观:
- 在HTML的
id属性中,你可以直接写id="Encres_à_écrire_et_dessiner",这符合HTML5规范,现代浏览器完全支持; - 如果想用HTML实体,比如把
à写成à、é写成é,浏览器解析id属性时会自动把实体转换成对应的Unicode字符,最终效果和直接写Unicode字符一致,但可读性更差; - 维基百科同时保留两个锚点(URL编码版和Unicode版),核心还是为了兼容旧浏览器——旧浏览器无法识别带重音符号的Unicode锚点,但能识别URL编码后的锚点,而现代浏览器两种都能正常解析。
内容的提问来源于stack exchange,提问作者katzu




