Преобразуйте все диакритические знаки в их базовые символы, а затем удалите все, что не является буквой или цифрой, используя Char.IsLetterOrDigit
.
Затем замените все пробелы одной чертой.
Это то, что мы используем в нашем программном обеспечении.
/// <summary>
/// Convert a name into a string that can be appended to a Uri.
/// </summary>
private static string EscapeName(string name)
{
if (!string.IsNullOrEmpty(name))
{
name = NormalizeString(name);
// Replaces all non-alphanumeric character by a space
StringBuilder builder = new StringBuilder();
for (int i = 0; i < name.Length; i++)
{
builder.Append(char.IsLetterOrDigit(name[i]) ? name[i] : ' ');
}
name = builder.ToString();
// Replace multiple spaces into a single dash
name = Regex.Replace(name, @"[ ]{1,}", @"-", RegexOptions.None);
}
return name;
}
/// <summary>
/// Strips the value from any non english character by replacing thoses with their english equivalent.
/// </summary>
/// <param name="value">The string to normalize.</param>
/// <returns>A string where all characters are part of the basic english ANSI encoding.</returns>
/// <seealso cref="/224770/kak-udalit-diakriticheskie-znaki-aktsenty-iz-stroki-v-net"/>
private static string NormalizeString(string value)
{
string normalizedFormD = value.Normalize(NormalizationForm.FormD);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < normalizedFormD.Length; i++)
{
UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(normalizedFormD[i]);
if (uc != UnicodeCategory.NonSpacingMark)
{
builder.Append(normalizedFormD[i]);
}
}
return builder.ToString().Normalize(NormalizationForm.FormC);
}
Что касается использования этих сгенерированных имен в качестве уникального идентификатора, я бы за это. Используйте сгенерированное имя в качестве помощника SEO, но не в качестве ключевого преобразователя. Если вы посмотрите, как stackoverflow ссылается на их страницы:
/224770/kak-udalit-diakriticheskie-znaki-aktsenty-iz-stroki-v-net
^--ID ^--Unneeded name but helpful for bookmarks and SEO
Вы можете найти ID там. Эти два URL указывают на одну и ту же страницу:
/224770/kak-udalit-diakriticheskie-znaki-aktsenty-iz-stroki-v-net
http://stackoverflow.com/questions/249087/