帮助:解析函数/anchorencode
anchorencode
将文本编码为 HTML 锚点格式。MediaWiki原生支持。
比如把章节名 前言 & 背景
变成有效的锚点格式:前言_&_背景
。
通常用于锚点内容不确定时,如模板中处理参数中的章节名,或批量处理生成章节链接。
语法
{{anchorencode:文本}}
参数
- 文本:任意字符串,会被处理为符合规范的锚点格式。
效果
- 返回值:已编码的锚点文本。
示例
代码 | 效果 | |
---|---|---|
基本用法 |
|
|
模板参数 |
参数1为 |
|
URL | [http://mw.org/page#{{anchorencode:URL data}} 页面]
|
[http://mw.org/page#URL_data 页面]
|
部分字符 会被转义 |
|
|
使用场景
为了保证锚点正常工作,HTML 和 URI 标准要求锚点不能包含特定字符(需要转义)。
在 URL 中,不同部分的编码要求不同,例如:
[https://example.com/page?query=value#section name 链接显示名]
[[页面#section name|页面显示名]]
其中:
value
(查询参数)需使用函数urlencode
编码section name
(锚点部分)需使用函数anchorencode
编码
多数情况下锚点内容是已知的,比如直接写[[页面#章节名]]
即可。即使有空格也可以手动改为下划线。
因此 anchorencode
的典型应用场景是锚点内容动态或不确定时,例如:
场景 1:模板参数处理
确保用户传入的任意参数都能生成有效的锚点:
<span id="{{anchorencode:{{{1|}}}}}"></span>
场景 2:批量生成锚点链接
对多个章节标题进行批量处理,无需逐一检查:
{{#arraymap:章节 1、章节 2 & 附录、章节 3|、|@@@|
[[页面#{{anchorencode:@@@}}|@@@]]
}}
边缘示例
示例 | 效果 | |
---|---|---|
特殊字符 |
|
|
底层代码
/** MediaWiki 1.37.0 CoreParserFunctions.php
* @param Parser $parser
* @param string $text.
* @return string
*/
public static function anchorencode( $parser, $text ) {
$text = $parser->killMarkers( $text );
$section = (string)substr( $parser->guessSectionNameFromWikiText( $text ), 1 );
return Sanitizer::safeEncodeAttribute( $section );
}
处理流程:
- 清理标记:移除 Strip marker(形如
'"`UNIQ--nowiki-FFFFFFFF-QINU`"'
的内部标记)。参见 Strip marker 和模板解析过程。 - 解析章节名:将输入文本解析为标准的章节名称格式。
- 标准化处理:清理 HTML 标签、Wiki 格式标记(粗体、斜体、链接);合并连续空格和下划线为单个空格;转换字符实体(如
、A
)为 UTF-8 字符。 - 安全编码:转换为符合 HTML 规范的锚点格式,并对特殊字符(
\n
、\r
、\t
、< > " { } [ ]
、''
、ISBN
、RFC
、PMID
、|
、__
)进行转义或替换为字符引用。
实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。
- 模板:SectionTabs - 战双帕弥什
- 模板:LtStage - 明日方舟
- 模板:根器栏 - 黑神话:悟空
- 模板:L - WIKI实验室
- 模板:Anchor - 女神转生
- 模板:To Megami Tensei Wiki - 女神转生
- 模板:A - 重返未来:1999
- 模板:A - 偶像大师灰姑娘女孩
- 模板:Iconbox - 都市天际线2
- 模板:Anchor - 上古卷轴5天际
- 模板:HE - 上古卷轴5天际
- 模板:Anchor - DEADLOCK
- 模板:Anchor - Noita
- 模板:神器图鉴模板 - 第七史诗
- 模板:Factionnav - 星际迷航OL