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

帮助:解析函数/anchorencode

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

anchorencode

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

常用于在模板中处理锚点相关参数。在创建链接时,可确保锚点被正确编码,避免因特殊字符导致链接失效。


语法

{{anchorencode:文本}}
返回值为“锚点安全格式”的字符串,适用于 HTML 元素 `id` 属性、Wiki 链接中的章节位置等。

示例

示例 效果
基本

{{anchorencode:1 z á 元}}

1_z_á_元

部分符号被编码

{{anchorencode:& < " { [}}

&amp;_&lt;_&quot;_&#123;_&#91;

编码锚点 [http://mw.org/page#{{anchorencode:URL data}} 这个页面] 这个页面
需要但未编码锚点 [http://mw.org/page#URL data 这个页面] data 这个页面(解析错误)
用于模板 创建锚点<span id="{{anchorencode:{{{1|}}}}}"></span> <span id="URL_data"></span>
使用场景:
  • 链接到页面内部或其他页面的特定章节
  • 模板中处理未知或用户输入的章节名
  • 避免手动编码特殊字符
注:
  • 对一个确定的URL,手动编码锚点当然可行。因此本函数更多地用于模板中,比如处理参数中未知的锚点参数。
  • 与urlencode不同:
    {{anchorencode:a:b/c d}} → a:b/c_d(HTML 锚点编码)
    {{urlencode:a:b/c d}} → a%3Ab%2Fc+d(整个 URL 或查询参数编码)


更多示例

示例 效果
链接

{{anchorencode:[[User:23333|诶嘿]]}}
{{anchorencode:[[Wiki:Skyrim#Section]]}}
{{anchorencode:[https://wiki.biligame.com BWIKI]}}

诶嘿
Wiki:Skyrim#Section
BWIKI

特殊字符

{{anchorencode:我“以前”跟''你''一样是一个'''冒险者'''}}
{{anchorencode: ©B       Wi     _ __ _     Ki }}
{{anchorencode:ISBN}}
{{anchorencode:ISBN RFC \n PMID <}}

我“以前”跟你一样是一个冒险者
©B_Wi_Ki
&#73;SBN
&#73;SBN&#95;__&#82;FC_\n_&#80;MID_&lt;

相关背景

锚点(fragment identifier)是 URL 井号 `#` 后的部分,用于定位网页中的某个位置。例如:

请参阅:

MediaWiki 会自动为标题生成锚点,也可以手动为标签添加 `id`:
  • 指定ID:<span id="diandian">...</span>
  • 标题:==hello lu== 生成的HTML是:<h2><span class="mw-headline" id="hello_lu">hello lu</span></h2>
  • 标题:==点点小课堂== 生成的HTML是:<h2><span id=".E7.82.B9…….E5.A0.82"></span><span class="mw-headline" id="点点小课堂">点点小课堂</span></h2>
锚点改变时浏览器会滚动到对应位置,但不会重新加载页面,因此常用于精确页面跳转与导航。

底层代码

/** 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(Strip marker,形如'"`UNIQ--nowiki-FFFFFFFF-QINU`"')。请参考Strip marker相关文档
  2. 将文本解析为章节名
  3. 清理和标准化字符(移除HTML标签、粗体斜体标记、清理链接; 合并空格、下划线为一个空格; 将字符引用如&nbsp &#65等转换为 UTF-8 字符串)
  4. 安全编码为 HTML 锚点格式。此外,还替换了\n \r \t < > " { } [ ] '' ISBN RFC PMID | 和 __ 为字符引用

实际用例

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