Tôi đã xây dựng một hình thức aspitte litte tìm kiếm một cái gì đó và hiển thị kết quả. Tôi muốn làm nổi bật chuỗi tìm kiếm trong kết quả tìm kiếm. Ví dụ:trường hợp thay thế chuỗi thay thế mà chính xác làm việc với ligatures như "ß" <=> "ss"
Query: "p"
Results: a<b>p</b>ple, banana, <b>p</b>lum
Mã mà tôi có đi như thế này:
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);
}
tôi chủ yếu là các công trình nhưng thử ví dụ với HighlightSubstring("ß", "ss")
. Sự cố này xảy ra do ở Đức "ß" và "ss" được coi là bằng theo phương pháp IndexOf
, nhưng chúng có độ dài khác nhau!
Bây giờ sẽ ổn nếu có cách tìm hiểu thời gian khớp trong "văn bản" là bao lâu. Hãy nhớ rằng độ dài này có thể là != substring.Length
.
Vậy làm cách nào để tìm hiểu độ dài của trận đấu IndexOf
sản xuất với sự hiện diện của chữ ghép và ký tự ngoại ngữ (chữ ghép trong trường hợp này)?
Chỉ cần tự hỏi: Tại sao chỉ đánh dấu "p" đầu tiên trong "quả táo"? – FrustratedWithFormsDesigner
Bạn đúng, tôi sẽ sửa đổi điều này để làm nổi bật tất cả các trận đấu ;-) thx. – usr
'StringComparison.OrdinalIgnoreCase' có làm những gì bạn muốn không? – Gabe