J'ai construit un petit formulaire asp.net qui cherche quelque chose et affiche les résultats. Je veux mettre en évidence la chaîne de recherche dans les résultats de recherche. Exemple:cas chaîne insensible qui fonctionne correctement avec des ligatures comme "ß" <=> "ss"
Query: "p"
Results: a<b>p</b>ple, banana, <b>p</b>lum
Le code que j'ai dit ceci:
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);
}
Je travaille surtout essayer mais par exemple avec HighlightSubstring("ß", "ss")
. Cela se bloque car en Allemagne "ß" et "ss" sont considérés comme égaux par la méthode IndexOf
, mais ils ont une longueur différente!
Maintenant ce serait bien s'il y avait un moyen de savoir combien de temps la correspondance en "texte" est. Rappelez-vous que cette longueur peut être != substring.Length
.
Alors, comment puis-je trouver la longueur de la correspondance que IndexOf
produit en présence de ligatures et de caractères de langage exotiques (ligatures dans ce cas)?
Je me demandais juste: pourquoi seulement mettre en évidence le premier "p" dans "apple"? – FrustratedWithFormsDesigner
Vous avez raison, je vais modifier cela pour mettre en évidence tous les matchs ;-) thx. – usr
Est-ce que 'StringComparison.OrdinalIgnoreCase' fait ce que vous voulez? – Gabe