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

全站通知:

帮助:解析函数/canonicalurle

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

Canonicalurle是一个魔术字。帮助:解析函数页列出了所有解析函数和魔术字的说明。

canonicalurle

获取页面完整URL,支持附加请求参数。MediaWiki原生支持。

会编码这些HTML实体:<>"&&lt;&gt;&quot;&amp;

语法

{{canonicalurle: 页面名 | 参数 }}
  • 不会校验页面和参数是否存在。
  • 多个参数需要手动处理,如示例所示。
  • 它会编码这些HTML实体:<>"&&lt;&gt;&quot;&amp;

示例

底层代码

/* mediawiki-1.37.0\includes\parser\CoreParserFunctions.php */
public static function canonicalurle( $parser, $s = '', $arg = null ) {
	$temp = self::urlFunction( 'getCanonicalURL', $s, $arg );
	if ( !is_string( $temp ) ) {
		return $temp;
	} else {
		return htmlspecialchars( $temp );
	}
}

/* mediawiki-1.37.0\includes\parser\CoreParserFunctions.php */
public static function urlFunction( $func, $s = '', $arg = null ) {
	$title = Title::newFromText( $s );
	# Due to order of execution of a lot of bits, the values might be encoded
	# before arriving here; if that's true, then the title can't be created
	# and the variable will fail. If we can't get a decent title from the first
	# attempt, url-decode and try for a second.
	if ( $title === null ) {
		$title = Title::newFromURL( urldecode( $s ) );
	}
	if ( $title !== null ) {
		# Convert NS_MEDIA -> NS_FILE
		if ( $title->inNamespace( NS_MEDIA ) ) {
			$title = Title::makeTitle( NS_FILE, $title->getDBkey() );
		}
		if ( $arg !== null ) {
			$text = $title->$func( $arg );
		} else {
			$text = $title->$func();
		}
		return $text;
	} else {
		return [ 'found' => false ];
	}
}
代码逻辑:
  • 根据页面名参数构建一个 Title 对象,根据参数生成URL
  • 其中的 htmlspecialchars 是PHP函数
  • getCanonicalURL函数涉及太多mediawiki处理URL的函数,不在此列出。

实际用例

  • BWiki中暂未发现