Php Mediawiki解析器和recursiveTagParse
我在hook中呈现wikitext以进行标记处理时遇到问题Php Mediawiki解析器和recursiveTagParse,php,mediawiki,Php,Mediawiki,我在hook中呈现wikitext以进行标记处理时遇到问题 public static function onTagRender( $input, array $args, $parser, $frame ) { ... $text = $parser->recursiveTagParse($sometext, $frame); ... return $text; } 如果$sometext包含例如 "Example from page [[XYZ]]" 然后我希望返回的$text应该
public static function onTagRender( $input, array $args, $parser, $frame ) {
...
$text = $parser->recursiveTagParse($sometext, $frame);
...
return $text;
}
如果$sometext包含例如
"Example from page [[XYZ]]"
然后我希望返回的$text应该包含
"Example from page <a href="/wiki/XYZ" title="XYZ">XYZ</a>"
“来自页面的示例”
但我只有
"Example from page <!--LINK 0:0-->"
“来自页面的示例”
我也尝试过$parser->replaceInternalLinks(),但结果相同。我忽略了什么?解析器::recursiveTagParse只做部分呈现,好的。这可能是问题所在,也可能不是问题所在。要完全呈现任何用户输入,必须创建解析器函数()而不是标记函数
请参见解析器::recursiveTagParse仅执行部分呈现,afaik。这可能是问题所在,也可能不是问题所在。要完全呈现任何用户输入,必须创建解析器函数()而不是标记函数
请参阅如果有些人遇到相同的问题,请尝试在
递归标记解析
之后调用替换链接持有者
。(我没有同样的问题,所以我没有测试它。)
所以在OP的代码片段中,应该是:
public static function onTagRender( $input, array $args, $parser, $frame ) {
...
$text = $parser->recursiveTagParse($sometext, $frame);
$text = $parser->replaceLinkHolders($text);
...
return $text;
}
根据我的理解解释:
实际上,通常的parse
方法调用internalParse
方法,该方法完成大部分工作,然后执行其他一些操作。另一方面,recursiveTagParse
几乎只调用internalParse
,因此它不执行parse
中的其他内容问题是,链接分两步解析:
LinkHolderArray
中,并在文本中替换为
。(这是由
replaceInternalLinks
完成的,由internalParse
调用,所以这很好。)
标记被解析为HTML链接。(这是由
replaceLinkHolder
完成的,它由parse
调用,而不是由internalParse
调用,因此也不是由recursiveTagParse
调用)如果有些人遇到同样的问题,请尝试在
递归标记解析
之后调用替换链接持有者
。(我没有同样的问题,所以我没有测试它。)
所以在OP的代码片段中,应该是:
public static function onTagRender( $input, array $args, $parser, $frame ) {
...
$text = $parser->recursiveTagParse($sometext, $frame);
$text = $parser->replaceLinkHolders($text);
...
return $text;
}
根据我的理解解释:
实际上,通常的parse
方法调用internalParse
方法,该方法完成大部分工作,然后执行其他一些操作。另一方面,recursiveTagParse
几乎只调用internalParse
,因此它不执行parse
中的其他内容问题是,链接分两步解析:
LinkHolderArray
中,并在文本中替换为
。(这是由
replaceInternalLinks
完成的,由internalParse
调用,所以这很好。)
标记被解析为HTML链接。(这是由
replaceLinkHolder
完成的,它由parse
调用,而不是由internalParse
调用,因此也不是由recursiveTagParse
调用)