手册:页面标题
页面标题,或称页面名,是指由page表存储、由Title对象表示的一个wiki页面的标题。
它在wiki的范围里可唯一识别,并承担一些关键目的:
- 作为人类可读的页面标题文本
- 作为访问页面的URL的基础
- 作为指向页面的wikitext链接
- 作为页面数据库的键
标题结构
按从左往右顺序,一个页面标题可能由以下部分组成:
- 一个可选的跨维基前缀,例如
mw:代表来自mediawiki.org的页面,w:代表维基百科的条目 - 一个命名空间前缀,例如
Manual:,如果页面属于主命名空间以外的命名空间 - 一个必需的专有页面名,由根页面名和可能存在的子页面名组成
- 一个可选的片段,由井号(#)开头
| 前缀: | 命名空间: | 页面名 |
| Optional | Optional | Required |
当一个人在向搜索框输入或向条目插入wiki链接时指定页面,输入应由一个命名空间(主命名空间则不填)、一个半角冒号(主命名空间则不必需)和数据库键名组成。 例如,Manual:Page table指定了Manual:(手册:)命名空间和Page table数据库键名。
#1和#2、跨wiki前缀和命名空间前缀
跨wiki前缀和命名空间前缀遵循相同的内容规则:
- 它们必须以一个字母开头
- 它们必须以一个半角冒号结尾
- 它们只能包含数字、字母、空格和下划线字符
- 空格和下划线可互相替代使用
- 它们对大小写不敏感
跨wiki前缀和命名空间能被识别的前提是它们对MediaWiki安装实例已知,无论是MediaWiki默认还是通过配置。
例如:在本wiki,“w:Name”链向维基百科中的“Name”条目,因为“w”被识别成一个允许的跨wiki前缀。
而标题“talk:Name”链向本wiki“talk”命名空间中名为“name”的页面,因为“talk”被识别成命名空间。
两种前缀可能同时存在。若如此,跨wiki前缀必须在前面,例如“w:talk:name”。
如果一个标题以半角冒号为第一个字符,则不检测前缀,去掉这个冒号再处理标题。
由于此规则,条目得以在名字中使用冒号。
“E. Coli 0157:H7”就是一个合法标题,“Commandos: Behind Enemy Lines”也是,因为“E. Coli 0157”和“Commandos”不是合法的跨wiki或命名空间。
#3、专有标题
专有标题有时称作条目名(尽管不是每个wiki页面都是条目)。
命名限制
专有标题有一些命名限制。
默认设置下,标题中除了第一个字符以外都是大小写敏感的。
你可以将$wgCapitalLinks设为false,以使第一个字符也大小写敏感。
不过,目前不能使页面标题完全大小写不敏感(phab:T2453)。
下列名称不能用作页面标题:
- 根页面名以小写字母开头(无论是何种语言的字母表),除非
$wgCapitalLinks设为true。 - 含以下任何字符的标题:
# < > [ ] | { } _(它们在wiki语法中有特殊含义)- 不可打印的ASCII字符0~31
- “删除”字符127
- HTML字符实体引用,如&
- 注意加号+允许在页面标题中使用,尽管在MediaWiki的默认设置中并非如此。
( ) & +这类的特殊字符会翻译为等价的“%十六进制”表示法。- 以半角冒号(:)开头的跟页面名。
- 等于“.”或“..”,或以“./”或“../”开头,或包含“/./”或“/../”,或以“/.”或“/..”结尾的根页面名。
- 长度超过255字节的根页面名。 注意非ASCII字符在UTF-8编码下可占据最多四个字节,所以你能在一个标题里塞下的字符数可能少于255个。
- 命名空间前含“Talk:”的标题。
- 含非法UTF-8序列的标题。
- 以命名空间别名开头的标题(比如在维基百科有WP:、Project:、Image:)。 例如,如果Project:设置成命名空间别名,Project:About就不成立。
- 以指代其它项目的前缀开头的标题,包括其它语言的维基百科,如“fr:”(参见跨wiki链接和跨语言链接)。 举例:关于专辑“Q: Are We Not Men? A: We Are Devo!”的条目无法取这个标题,因为“q:”这个前缀指向维基语录。 (这个限制也包括前缀“w:”和“en:”,它们指代英语维基百科本身。 这种自指限制不一定适用于所有项目。 比如,维基语录支持以“Q:”开头的标题。) 所有跨wiki前缀的列表可在Special:Interwiki找到。
- 命名空间或跨wiki前缀中非首字母大写的标题,或者前缀冒号前后有空格或下划线的标题。 例如,标题不可能以"HELP:", "HeLp:", "Help :", "Help:_"之类开头。
- 仅含命名空间前缀,冒号后没有任何东西的标题。
- 以空格或下划线开头或结尾的标题,或者含连续两个或以上的空格或下划线的标题。
- 包含连续3个或更多个波浪号的标题。(~~~)
- 标题一般可以包含%字符。 然而它不能包含%尾随两个十六进制数码(会导致它由百分号编码转换成单一字符)。
- 还要注意编者不可以创建以Media:和Special:虚拟命名空间前缀开头的页面标题。
特例
- 默认情况下,标题的小写首字母会自动转换成大写。 可以有针对各命名空间的配置。 参见$wgCapitalLinks和$wgCapitalLinkOverrides。
- The magic words PAGENAME and FULLPAGENAME return encoded strings in which some types of characters, such as apostrophes, are converted to numeric character sequences. This means that while apostrophes are perfectly valid in page names, you may encounter issues when reusing those strings for some purpose.
One simple way to fix this is wrapping the pagename in {{#titleparts:}} from the ParserFunctions extension. Be warned though that if the first character is lowercase, #titleparts will change it to uppercase.
#4、标题片段
标题可能以一个标题片段(或者叫链接片段)结尾,它以井号(#)开头。
- MediaWiki核心用它标识页面上的章节,其名字通常取自章节标题的去标签化版本。 参见章节编辑的文档。
- Semantic MediaWiki扩展也用它标识“子对象”。
编码
- 空格和下划线视为等价,在合适语境中会互相转换(URL和数据库键使用下划线,纯文本使用空格)。
- 所有地方都允许0x80至0xFF的扩展ASCII字符,这些是合法字符。
- 标题在URL中要经过编码。扩展ASCII字符用作文本和数据库键时不会经过URL编码。
- 其它字符可能有ASCII字母、数字、连字符、逗号、句号、撇号、括号和冒号。
- 不允许其它ASCII字符,发现则会删除(它们可能会导致浏览器错误地解释URL)。
规范形式
Title对象永远返回标题的规范形式。规范化过程如下:
- 某些Unicode方向字符(如左至右标记)会被去除,因为它们通常来自错误的复制粘贴。
- 从
#开始的所有字符都会被去除,因为这部分是用作章节链接的。 - 下划线和/或某些空格字符的序列会折叠成单一下划线(URL或数据库键形式)或单一空格(文本形式)。 位于标题(包括跨wiki前缀和命名空间)开头和结尾的这些字符会被去除。
- 识别出的跨wiki前缀经规范化后变成全小写。
- 识别出的命名空间名称经规范化后变成首字母大写,其余小写。 (然而对于跨wiki链接没有这一过程。)
- 取决于wiki和命名空间的设定,标题的首字母可能会也可能不会大写。 (然而对于跨wiki链接没有这一过程。)
- 对于链接至匿名用户的用户页,IP地址会受到规范化。
- 规范化过程还包括一些拒绝各种不合规标题(例如过长标题、含非法字符的标题)的验证逻辑。
相关概念
显示标题
页面标题不可与显示标题混淆,后者是指与页面关联的偏好标签。 默认情况下,显示标题与页面标题相同,但可以按需更改或定制。
参阅
- 手册:page表#page_title
- Manual:Title.php
- Manual:Modeling pages – 涉及对有关于页面、页面标题和链接的数据模型之正在进行的更改
- Help:Page title – 面向用户的文档
- Help:魔术字 – 使用wiki代码(如{{PAGENAME}})之类的手段,可以在不用知道标题具体是什么的情况下在wikitext里使用页面标题
- 维基百科的做法: