diff --git a/src/Core/Services/SearchService.cs b/src/Core/Services/SearchService.cs index 8a5b6ac7d..565379408 100644 --- a/src/Core/Services/SearchService.cs +++ b/src/Core/Services/SearchService.cs @@ -5,6 +5,7 @@ using System.Threading; using System.Threading.Tasks; using Bit.Core.Abstractions; using Bit.Core.Models.View; +using Bit.Core.Utilities; namespace Bit.Core.Services { @@ -76,12 +77,12 @@ namespace Bit.Core.Services ct.ThrowIfCancellationRequested(); var matchedCiphers = new List(); var lowPriorityMatchedCiphers = new List(); - query = query.Trim().ToLower(); + query = (query.Trim().ToLower().RemoveDiacritics()); foreach (var c in ciphers) { ct.ThrowIfCancellationRequested(); - if (c.Name?.ToLower().Contains(query) ?? false) + if (c.Name?.ToLower().RemoveDiacritics().Contains(query) ?? false) { matchedCiphers.Add(c); } @@ -89,7 +90,7 @@ namespace Bit.Core.Services { lowPriorityMatchedCiphers.Add(c); } - else if (c.SubTitle?.ToLower().Contains(query) ?? false) + else if (c.SubTitle?.ToLower().RemoveDiacritics().Contains(query) ?? false) { lowPriorityMatchedCiphers.Add(c); } diff --git a/src/Core/Utilities/StringExtensions.cs b/src/Core/Utilities/StringExtensions.cs new file mode 100644 index 000000000..d45530f14 --- /dev/null +++ b/src/Core/Utilities/StringExtensions.cs @@ -0,0 +1,33 @@ +using System; +using System.Globalization; +using System.Text; + +namespace Bit.Core.Utilities +{ + public static class StringExtensions + { + public static string RemoveDiacritics(this String text) + { + var normalizedString = text.Normalize(NormalizationForm.FormD); + var stringBuilder = new StringBuilder(capacity: normalizedString.Length); + + for (int i = 0; i < normalizedString.Length; i++) + { + char c = normalizedString[i]; + var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c); + if (unicodeCategory != UnicodeCategory.NonSpacingMark) + { + stringBuilder.Append(c); + } + } + Console.Write(stringBuilder.Length); + Console.WriteLine(stringBuilder.ToString().Normalize(NormalizationForm.FormC)); + + + return stringBuilder + .ToString() + .Normalize(NormalizationForm.FormC); + + } + } +}