【发布时间】:2011-05-24 15:01:32
【问题描述】:
我有一个名为 HighlightKeywords 的辅助方法,我在查看搜索结果时在论坛上使用它来突出显示用户搜索过的帖子中的关键字。
我遇到的问题是,例如,用户搜索关键字“hotmail”,HighlightKeywords 方法然后找到该关键字的匹配项并用指定要应用的样式的 span 标签包装它,它在其中查找匹配项html 锚标签和某些情况下的图像标签。结果,当我将突出显示的帖子呈现到屏幕上时,html 标签被破坏(由于在其中插入了跨度)。
这是我的功能:
public static string HighlightKeywords(this string s, string keywords, string cssClassName)
{
if (s == string.Empty || keywords == string.Empty)
{
return s;
}
string[] sKeywords = keywords.Split(' ');
foreach (string sKeyword in sKeywords)
{
try
{
s = Regex.Replace(s, @"\b" + sKeyword + @"\b", string.Format("<span class=\"" + cssClassName + "\">{0}</span>", "$0"), RegexOptions.IgnoreCase);
}
catch {}
}
return s;
}
防止这种情况发生的最佳方法是什么?即使我可以简单地排除锚标记(无论是网络地址还是电子邮件地址)或图像标记中出现的任何匹配项?
【问题讨论】:
-
您确实需要使用某种 HTML 解析器,检查每个元素是否匹配。如果包含元素能够接受部分包含文本的样式,则应用它。