社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103

全站通知:

帮助:解析函数/anchorencode

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

anchorencode

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

常用于在模板中处理锚点相关的参数。创建链接时,可保证锚点被正确编码。


语法

{{anchorencode:文本}}

示例

示例 效果
基本

{{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,手动编码锚点当然可行。因此本函数更多地用于模板中,比如处理参数中未知的锚点参数。


更多示例

示例 效果
链接

{{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;

注意与urlencode不同:{{urlencode:a:b/c d}}  -> a%3Ab%2Fc+d

相关背景

锚点,URL井号后的部分,代表一个网页上的位置,请参阅:
Wiki会自动为标题增加相同名字的锚点,也可以通过指定标签的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>
一个带有锚点的URL能让页面滚动到指定位置。在打开的页面中修改URL锚点可以滚动页面到新位置,不重新加载页面。
基于此,锚点常被用于精确控制页面跳转,比如使用[[#章节名]][[页面#章节名]]可以滚动页面到指定章节,或跳转其他页面的指定章节

底层代码

/** 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(部分解析函数、标签和嵌入的特殊页面不是直接将代码嵌入的,而是先是用“占位符”Strip marker如'"`UNIQ--nowiki-FFFFFFFF-QINU`"',后续才替换为实际内容。因此anchorencode执行时可能会遇到Strip marker)。请参考Strip marker相关文档
  • 保留锚点部分,移除、转换特定字符(移除HTML标签、移除粗体斜体的英文引号、清理链接; 合并多个空格、下划线为一个空格; 将字符引用如&nbsp &#65等转换为 UTF-8 字符串)
  • 安全编码为锚点格式。包括调用PHP的htmlspecialchars函数,此外,还替换了\n \r \t < > " { } [ ] '' ISBN RFC PMID | 和 __ 为字符引用

实际用例

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