Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250923.2
全站通知:

帮助:解析函数/anchorencode

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
anchorencode 悬浮框🟢稳定可用
将文本编码为 HTML 锚点格式
{{anchorencode: 文本}}
扩展:MediaWiki
编码
URL
相关函数
相关资源
相关概念

anchorencode

将文本编码为 HTML 锚点格式。MediaWiki原生支持。

比如把章节名 前言 & 背景 变成有效的锚点格式:前言_&_背景

通常用于锚点内容不确定时,如模板中处理参数中的章节名,或批量处理生成章节链接。

语法

{{anchorencode:文本}}
参数
  • 文本:任意字符串,会被处理为符合规范的锚点格式。
效果
  • 返回值:已编码的锚点文本。

示例

代码 效果
基本用法

[[首页#{{anchorencode:前言 & 背景}}]]

[[首页#前言_&_背景]]

模板参数

<span id="{{anchorencode:{{{1|}}}}}"></span>

参数1为Let's go

<span id="Let&#039;s_go"></span>

URL [http://mw.org/page#{{anchorencode:URL data}} 页面] [http://mw.org/page#URL_data 页面]
部分字符
会被转义

{{anchorencode:& < "}}

{{anchorencode:{ [ |}}

&amp;_&lt;_&quot;

&#123;_&#91;_&#124;

使用场景

为了保证锚点正常工作,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:@@@}}|@@@]]
}}

边缘示例

示例 效果
特殊字符

{{anchorencode:我“以前”也是一个'''冒险者'''}}

{{anchorencode: ©B       Wi     _ __ _     Ki }}

{{anchorencode:ISBN}}

{{anchorencode:ISBN RFC PMID}}(包含特殊字符)

我“以前”也是一个冒险者

©B_Wi_Ki

&#73;SBN

&#73;SBN&#95;__&#82;FC&#95;_&#80;MID

底层代码

/** 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 );
}

处理流程:

  1. 清理标记:移除 Strip marker(形如 '"`UNIQ--nowiki-FFFFFFFF-QINU`"' 的内部标记)。参见 Strip marker模板解析过程
  2. 解析章节名:将输入文本解析为标准的章节名称格式。
  3. 标准化处理:清理 HTML 标签、Wiki 格式标记(粗体、斜体、链接);合并连续空格和下划线为单个空格;转换字符实体(如 &nbsp;&#65;)为 UTF-8 字符。
  4. 安全编码:转换为符合 HTML 规范的锚点格式,并对特殊字符(\n\r\t< > " { } [ ]''ISBNRFCPMID|__)进行转义或替换为字符引用。

实际用例

一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考