【问题标题】:I'd like to implement dynamic hyperlinks based on keywords, but how我想实现基于关键字的动态超链接,但是如何
【发布时间】:2009-10-15 13:17:25
【问题描述】:

我有一个充满单词的数据库表。我想做的是有一种方法以超链接的形式在 html 中向用户显示这些关键字中的任何一个。有点像你现在在许多论坛上看到的。当在 html 中注明关键字时,它变为可点击的。有没有办法做到这一点?我正在使用 php。

谢谢

【问题讨论】:

  • 包含这些词的内容是生成的还是静态的?
  • 好吧,从某种意义上说,数据库中的单词是静态的,但在页面加载时需要是动态的。这听起来一点也不容易。
  • 当用户点击某个页面时,应该评估整个页面并与数据库值进行比较。如果一个词存在于 html AND 数据库中,那么应该给这个词一个链接。

标签: php javascript jquery


【解决方案1】:

我能想到的最明显的方法是遍历数据库中的每个关键字,并在 HTML 上为每个关键字运行 preg_replace(只需用适当的超链接替换每个单词)。

您的正则表达式可能很复杂,因为您需要确保没有任何单词替换会干扰您的 HTML,并且您还需要确保只替换整个单词而不是部分单词。

最后,如果您的单词数据库非常大,那么每次请求都执行此操作会很昂贵。所以考虑执行一次并存储结果。

或者,将处理卸载到客户端并使用 JavaScript 进行替换。修改 HTML 标签可能不是问题,因为您应该能够仅在 DOM 的文本节点上运行替换。但同样,如果您的数据库很大,您将不得不向客户端发送一长串单词,以便 JavaScript 循环。

【讨论】:

  • 谢谢本。该表超过 12000 行,所以我认为它确实会非常昂贵。假设我要使用 preg_replace;我将如何解析文档中的所有单词?我需要以某种方式将它们放入一个数组中,不是吗?我的意思是,必须以某种方式将所有单词都分解才能与数据库进行比较。
【解决方案2】:

您创建一个链接 URL 表,其中包含一个 ID 字段和一个存储关键字表中行 ID 的字段。您使用以下内容选择链接的网址:

select keywords.name, links.url
from keywords, links
where keywords.id = links.keywords_id
and keyword.name = 'keyword_in_the_html'

【讨论】:

  • 谢谢杰夫。到目前为止,我已经完成了这么多,但我有点卡在如何解析 html 上。我的意思是,必须对每个单词进行评估并与链接表进行比较。我只是不知道该怎么做。您对如何解析 html 有什么建议吗?
  • 您可以使用简单的正则表达式按单词边界将其分解,例如preg_match('/\b(.+?)\b/', $html).
猜你喜欢
  • 2011-11-06
  • 2017-07-18
  • 1970-01-01
  • 2013-07-24
  • 2018-08-15
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多