hyperlink - 在哪里可以找到将内部 MediaWiki 链接转换为文章 URL 的代码?

标签 hyperlink mediawiki wikipedia article

我需要准确复制维基百科关于将页面正文中的 [[links]] 转换为打开其引用的文章的 URL 的行为。

描述了链接语法及其行为(转换)here 。虽然那篇文章只提到了一些非常基本的修改,但我认为这并不是全部。

我尝试搜索 MediaWiki API 引用,但没有找到我正在寻找的特定代码段。有足够熟悉代码的人知道我可能在谈论哪个 PHP 函数(大概与编辑/提交相关)吗?

最佳答案

这有两个部分:

  1. 解析链接语法。
  2. 根据页面标题生成 URL。

解析链接是由 Parser 类完成的,该类完成所有维基文本处理。链接可以比 [[Foo]] 更复杂,例如[[Foo#bar|something]],其中 Foo 是目标页面,#bar 是一个部分,“something”是生成链接的“表面文本”。为了生成 URL,您需要目标页面和部分。要生成链接(HTML 格式),您还需要表面文本(如果未给出,则与目标页面 + 部分相同)。目前没有简单的方法可以在不进行完整维基文本处理的情况下解析链接。

如果您已经有了目标页面标题(可能还有部分 ID),那么您有两种获取其 URL 的选择:旧式(整体)方式,或新式(基于服务)方式。

新的样式方法是:

  • 使用 MediaWikiTitleCodec::parseTitle 从您拥有的字符串生成 TitleValue 对象。
  • 使用 MediaWikiPageLinkRenderer::getPageURL 获取给定 TitleValue 对象的页面 URL。

传统的方法是:

  • 使用 Title::newFromText() 从您拥有的字符串创建 Title 对象。
  • 使用 Title::getFullURL() 获取页面 URL。

旧样式更容易,因为它不需要您创建服务对象。它依赖于全局状态并对所有依赖项进行硬编码。新样式使用简单的依赖注入(inject),它允许单独交换所有部分并独立测试 - 但它需要更多的代码。

关于hyperlink - 在哪里可以找到将内部 MediaWiki 链接转换为文章 URL 的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28523573/

相关文章:

css - 如何使按钮看起来像一个链接?

php - 如何在没有密码的情况下在 MediaWiki 1.19 中授权用户?

java - Wikipedia Dump 会在 Lucene 中变大吗?

java - 使用 eclipse 使用 wikipedia api 所需的 token (或其他东西)

html - 图片超链接不可点击

jquery - "Clickable" Canvas 驱动的翻页演示中的链接和文本输入

python - BeautifulSoup 获取字符串之间的链接

javascript - 如何从 MediaWiki 的工具箱中删除项目?

java - android 的 mediawiki 语法分析器

api - 维基百科 API 是否支持搜索特定模板?