C# Рекомендуемый способ выполнения пользовательского кодирования строки

Итак, мой вопрос довольно прост. У меня есть строка, и я хочу иметь возможность использовать ее в URL. Просто, правда? Сложность, однако, в том, что я хочу собственный способ кодирования. Видите ли, мой язык полон é, í, ô, ä, ľ, š, č, ť..., вы поняли.

Итак, допустим, у меня есть такая строка:

Čečenský bojovník sa pobil v košickej väzbe

Если я использую HttpUtility.EncodeUrl, я получаю эту строку:

%c4%8ce%c4%8densk%c3%bd+bojovn%c3%adk+sa+pobil+v+ko%c5%a1ickej+v%c3%a4zbe

Тем не менее, моя желаемая строка будет выглядеть следующим образом (при попытке создать максимально удобные для пользователя URL-адреса):

cecensky-bojovnik-sa-pobil-v-kosickej-vazbe

Использование функции EncodeUrl тогда не вариант. Итак, я написал себе функцию для нескольких манипуляций со строкой, делая именно то, что мне нужно.

public static string EncodeForUrl(this string s)
{
    string temp = s.StripDiacritics();  // one custom function
    temp = temp.ToLower();
    temp = temp.Trim();
    temp = temp.Replace(" ", "-");
    return temp;
}

Я думаю, что очевидно, что происходит, и это прекрасно работает. Ну, за исключением того факта, что строка неизменна, так что происходит довольно много ненужных выделений памяти.

Итак, наконец, я добрался до своего вопроса - есть ли рекомендуемый, более эффективный способ сделать это?

2 ответа

Решение

После некоторого поиска в Google я наконец нашел ответ, который удовлетворил мои потребности. Вероятно, наилучшим образом справляется Stackru.

Как Stack Overflow генерирует свои SEO-дружественные URL-адреса?

и это для снятия диакритики, даже лучше, чем моя текущая версия

https://meta.stackexchange.com/questions/7435/non-us-ascii-characters-dropped-from-full-profile-url/7696

Вы можете пропустить ToLower() и вместо Replace() вы можете сделать что-то похожее на это: /questions/43994028/samyij-byistryij-sposob-udalit-probelyi-v-stroke/43994045#43994045

Другие вопросы по тегам