Ich habe eine kleine asp.net Formular erstellen, die nach etwas sucht und zeigt die Ergebnisse. Ich möchte den Suchstring innerhalb der Suchergebnisse hervorheben. Beispiel:Fall insenStive Zeichenfolge ersetzen, die korrekt funktioniert mit Ligaturen wie "ß" <=> "ss"
Query: "p"
Results: a<b>p</b>ple, banana, <b>p</b>lum
Der Code, den ich habe so geht:
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);
}
ich funktioniert meistens aber versuchen, es zum Beispiel mit HighlightSubstring("ß", "ss")
. Dies stürzt ab, weil in Deutschland "ß" und "ss" gleich von der IndexOf
Methode sind, aber sie haben unterschiedliche Länge!
Nun wäre das in Ordnung, wenn es eine Möglichkeit gäbe herauszufinden, wie lange die Übereinstimmung in "text" ist. Denken Sie daran, dass diese Länge sein kann.
Also wie finde ich die Länge der Übereinstimmung, die IndexOf
in Gegenwart von Ligaturen und exotischen Sprache Zeichen (Ligaturen in diesem Fall) produziert?
Ich frage mich nur: Warum nur das erste "p" in "Apfel" hervorheben? – FrustratedWithFormsDesigner
Du hast Recht, ich werde das ändern, um alle Übereinstimmungen hervorzuheben ;-) thx. – usr
Funktioniert 'StringComparison.OrdinalIgnoreCase', was Sie wollen? – Gabe