【发布时间】:2011-01-12 16:46:59
【问题描述】:
我有一个“人”的 MySQL 表作为网站的一部分,例如:
| people_id |名字 |姓氏 | ----------------------------------------- | 1 |约翰 |列侬 | | 2 |保罗 |麦卡特尼 | | 3 |乔治 |哈里森 | | 4 |林戈 |斯塔尔 | | . | . | . |我的表大约有 2000 行。
我在网站上还有一个“新闻”部分。通常,这些新闻项目包含对“人”的引用,例如
约翰列侬和保罗麦卡特尼写道 一些最流行的歌曲在 摇滚音乐的历史。
是否可以(或合理/可取)自动解析每条新闻以查找数据库中的“人”,然后将它们转换为链接。因此,例如,上面的文本将变成这样(或功能等效的东西):
<a href="/people/1>John Lennon</a> and <a href="/people/2">Paul McCartney</a> wrote some of the most popular songs in the history of rock music.
最好的方法是什么?我在 php 中使用正则表达式进行了一些失败的尝试,但我想这不是最好的方法。我对 javascript(及其框架)了解不多,但如果这样做有意义,我会很乐意使用它。
这不是网站的基本功能(但我觉得这是一个很好的补充),所以我宁愿省略这样的功能,而不是大幅增加页面加载时间。
编辑
我在最初的问题中省略了一些细节,以缩短篇幅。
事实上,它是一个足球俱乐部的网站——所有“人”都是该网站的成员,可以登录、添加和编辑新闻报道(例如,比赛报道),他们在其中经常提到其他“人”。所以添加新闻报道的不只是我 - (大约)2000 名其他用户可以添加它们。
虽然会员资格有一定的限制,必须先获得批准才能加入,但系统必须能够处理复杂的问题,例如名字不寻常的人,并且有几个人同名的情况.
我已经实现了一种解决方案,其中我使用一种专有代码来标记人们的名字(例如 [p=1]John Lennon[/p]),但我发现,在 2000该网站的用户,只有少数人使用它。
值得一提的是,该网站是 www.ouafc.com,而新闻报道的例子是 www.ouafc.com/news/312。
【问题讨论】:
-
这可能很棘手 - 例如,您将如何处理“约翰列侬基金会”?仅链接名称可能看起来仍然像您打算链接到基金会...
-
@OrbMan,即使在那种情况下(虽然我完全理解这一点,但不要误会我的意思),只要它引用相同的 John Lennon 它仍然是正确的。取决于实现,如果链接是从 John 的开头然后是 Lennon 的,只要 Foundation 部分没有与它。
-
技术上正确,但可用性受到影响。另一个极端情况是子字符串匹配,您同时拥有
John Smith和John Smith Jones用户 - 您必须注意双嵌入链接情况。 -
对我来说听起来是个有趣的想法。由于您可能控制了数据库,我相信您可以找到处理潜在名称冲突的方法,例如 John Smith 示例。我假设该网站的内容相当具体,所以人们应该知道,如果有一个链接指向一个名叫约翰列侬的总统竞选人,那可能不是来自......它是什么......猴子? ;o)
-
对于某些问题,一种可能的解决方法是使用正则表达式来检查相邻单词的大小写,这样如果 'Jones' 出现在它之后,'John Smith' 就不会收到链接,而 'John如果“The”在前或“Foundation”在后,列侬不会。由于名称不一定是唯一的,因此不会有任何完美的解决方案,但我相信您可以找到解决方法以使其在大多数情况下正常运行。
标签: php javascript jquery mysql