usr*_*usr 6 .net culture encoding localization cultureinfo
我已经构建了一个小的asp.net表单,可以搜索某些内容并显示结果.我想在搜索结果中突出显示搜索字符串.例:
Query: "p"
Results: a<b>p</b>ple, banana, <b>p</b>lum
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的:
public static string HighlightSubstring(string text, string substring)
{
var index = text.IndexOf(substring, StringComparison.CurrentCultureIgnoreCase);
if(index == -1) return HttpUtility.HtmlEncode(text);
string p0, p1, p2;
text.SplitAt(index, index + substring.Length, out p0, out p1, out p2);
return HttpUtility.HtmlEncode(p0) + "<b>" + HttpUtility.HtmlEncode(p1) + "</b>" + HttpUtility.HtmlEncode(p2);
}
Run Code Online (Sandbox Code Playgroud)
我主要是工作,但尝试用例如HighlightSubstring("ß", "ss").这崩溃是因为在德国,"ß"和"ss"被认为是相同的IndexOf方法,但它们有不同的长度!
现在,如果有办法找出"文本"中的匹配有多长,那就没关系了.请记住,这个长度可以!= substring.Length.
那么如何找出IndexOf在存在连字和外来语言字符时出现的匹配长度(在这种情况下是连字)?
这可能不会直接回答您的问题,但也许会解决您的实际问题。
为什么不替代呢?
using System.Text.RegularExpressions;
public static string HighlightString(string text, string substring)
{
Regex r = new Regex(Regex.Escape(HttpUtility.HtmlEncode(substring)),
RegexOptions.IgnoreCase);
return r.Replace(HttpUtility.HtmlEncode(text), @"<b>$&</b>");
}
Run Code Online (Sandbox Code Playgroud)
但文化又如何呢?如果将正则表达式指定为不区分大小写,则根据http://msdn.microsoft.com/en-us/library/z0sbec17.aspx默认情况下它是区分区域性的。
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |