关于html:如何处理Wiki页面内容中的自动链接?

关于html:如何处理Wiki页面内容中的自动链接?

How should I handle autolinking in wiki page content?

自动链接的意思是将页面内容中内联的Wiki链接生成为页面的超链接(如果存在)或创建链接(如果页面不存在)的过程。

使用我正在使用的解析器,这是一个两步过程-首先,解析页面内容,并从源标记提取到Wiki页面的所有链接。 然后,在生成最终的HTML标记之前,我将现有页面的数组反馈给解析器。

处理此过程的最佳方法是什么? 似乎我需要保留网站上每个页面的缓存列表,而不必每次都提取页面标题的索引。 还是最好单独检查每个链接以查看其是否存在? 如果未缓存列表,则可能导致大量数据库查找。 这对于拥有数千页的更大的Wiki网站仍然可行吗?


我曾经尝试过一次,那真是一场噩梦!我的解决方案是SQL过程中的一个讨厌的循环,我不建议这样做。

给我带来麻烦的一件事是决定对多词短语使用哪个链接。假设您有一段文字说"我正在使用堆栈溢出",而您的Wiki有3个页面,分别称为"堆栈","溢出"和"堆栈溢出"...。短语的哪一部分链接到哪里?它会发生!


在我自己的Wiki系统中,我的缓存系统非常简单-在页面更新时,它会检查链接以确保其有效,并对无效的链接应用正确的格式/位置。缓存的页面另存为HTML页面,位于我的缓存根目录中。

在页面更新期间标记为"未创建"的页面被插入到保存该页面的数据库表中,然后插入链接到该页面的csv页面中。

当某人创建该页面时,它将启动扫描以浏览每个链接页面,并使用正确的链接和格式重新缓存该链接页面。

如果您不希望突出显示未创建的页面,则可以使用一个检查器来查看尝试访问该页面时是否创建了该页面-如果没有重定向到创建页面。然后只需链接到其他文章中的常规页面即可。


在我自己的Wiki中,我检查了所有链接(无缓存),但是内部只有少数人使用我的Wiki。您应该像这样基准测试。


根据我开发Juli(一种具有自动链接功能的脱机个人Wiki)的经验,生成静态HTML方法可能会解决您的问题。

如您所想,生成自动链接的Wiki页面需要花费很长时间。但是,在生成静态HTML的情况下,仅当新添加或删除Wiki页面时才发生重新生成自动链接的Wiki页面的情况(换句话说,更新Wikipage时不会发生),并且可以在后台完成"重新生成",因此通常没关系,要花多长时间。用户将仅看到生成的静态HTML。


在通过Markdown运行内容之后,我使用Sinatra(链接文本)制作了一个个人项目,我用gsub替换了维基文字和其他内容(例如[[Here is my link]]和诸如此类的东西),并在每个链接上都添加了适当的链接。检查页面是否存在,并链接以创建或查看。

这不是最好的,但我在构建此应用程序时并未考虑到缓存/速度。这是资源贫乏的简单Wiki。

如果速度更为重要,则可以将应用程序包装在某种形式中以对其进行缓存。例如,可以使用Rack缓存包装sinatra。


我的想法是查询SELECT title FROM articles之类的标题,然后简单地检查每个wikilink是否在该字符串数组中。如果是,则链接到页面,如果不是,则链接到创建页面。


推荐阅读