社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544

全站通知:

帮助:解析函数/anchorencode

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


anchorencode

将文本转换为HTML锚点格式(URL井号后的部分),确保其安全且符合Web标准。

为页面链接动态添加锚点时,它能确保锚点被正确编码。

语法

{{anchorencode:文本}}

例子

  1. {{anchorencode:<h2>1 z á 元</h2>}} → 1_z_á_元
  2. {{anchorencode:a:b/c d e}} → a:b/c_d_e
    • 注意与urlencode不同{{urlencode:a:b/c d e}} → a%3Ab%2Fc+d+e
  3. {{anchorencode:[[User:23333|诶嘿]]}} → 诶嘿
  4. {{anchorencode:[[Wiki:Skyrim#Section]]}} → Wiki:Skyrim#Section
  5. {{anchorencode:[https://wiki.biligame.com BWIKI]}} → BWIKI
  6. {{anchorencode:我“以前”跟一样是一个冒险者}} → 我“以前”跟你一样是一个冒险者
  7. {{anchorencode: ©B       Wi     _ __ _     Ki}} → ©B_Wi_Ki
  8. {{anchorencode:ISBN}}&#73;SBN
  9. {{anchorencode:ISBN RFC \n PMID <}}&#73;SBN&#95;__&#82;FC_\n_&#80;MID_&lt;

相关概念

锚点,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="..."></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 );
}

代码逻辑:

  • 移除任何MediaWiki标记或特殊语法,确保后续处理只关注纯文本内容。
  • 保留锚点部分,移除、转换特定字符(移除HTML标签、移除粗体斜体的英文引号、清理链接; 合并多个空格、下划线为一个空格; 将字符引用如&nbsp &#65等转换为 UTF-8 字符串)
  • 安全编码为锚点格式。包括调用PHP的htmlspecialchars函数,此外,还替换了\n \r \t < > " { } [ ] '' ISBN RFC PMID | 和 __ 为字符引用

实际用例

BWIKI中实际应用它的页面。这个静态列表可能在下列页面更改后过时