我们在 MySQL 中存储 HTML 内容 block (它是在 CKeditor 中创建的格式化文本。Ckeidor 添加内联 CSS 样式来格式化文本)。我们将数据库存储在名为“page_content”的列中
我们想要一个允许用户搜索文本(仅)的搜索功能。然而,我们不希望搜索返回 HTML 字符,而这正是现在正在发生的事情。例如,如果我们搜索“字体”,我们不希望搜索结果返回具有 HTML 样式的页面 <font>
在从 MySQL 搜索 HTML 存储的内容时,有什么方法可以忽略 HTML/CSS 字符吗?
最佳答案
您是否考虑过为这些搜索设置单独的表格? MySQL's full text search仅适用于 MyISAM 表,因此您可能不想将全文搜索与重要数据混合使用(当然,除非您对外键和参照完整性有一些奇怪的厌恶)。
我过去使用的方法基本上是这样的:
- 设置一个具有简单 (id, search_text) 结构的单独表。
id
与您正在搜索的内容的id
匹配。search_text
是您要搜索的所有内容(正文、标题、作者姓名...),它们融合成一个文本 block 。
- 添加full text indexing在搜索表上。
- 更新您的数据库更新过程以将适当的
search_text
字符串构造为纯文本;在这里您可以去除 HTML 并可能应用一些其他映射(例如将“A+”之类的内容扩展为全文搜索将找到的内容)。 - 搜索时,您应用与可搜索数据相同的映射,然后在搜索表中查找匹配项。
这解决了您的 HTML 问题,让您可以轻松地搜索 HTML 内容之外的内容,并允许您通过重复对搜索文本的不同部分进行加权来调整搜索结果(例如,如果您希望标签比正文更重要文本,只需在构建 search_text
时将标签添加两到三次即可。
您必须处理文本以删除或忽略 HTML。这种方法让您只需执行一次,而不是在每次搜索时都执行。
关于php - 搜索 HTML 存储内容时忽略 HTML 字符 PHP/MySQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590548/