Преобразуйте заголовок в штриховую благоприятную для URL [закрытую] строку

19
задан halfer 9 June 2019 в 17:58
поделиться

5 ответов

, а не в поисках вещей, чтобы заменить, список безоговорочно Chars настолько короткий , он сделает для приятного четкого регеляции.

return Regex.Replace(value, @"[^A-Za-z0-9_\.~]+", "-");

(Обратите внимание, что я не включал прибор в списке разрешенных символов; это так, что он сожал от оператора «1 или более» [ + ] так, чтобы несколько тире (в Оригинал или сгенерирован или комбинация) рухнуты, согласно превосходной точке Доминика Роджера.)

Вы также можете удалить общие слова («« »,« AN »,« A »и т. Д.), Хотя это может сделать Слегка измените значение предложения. Вероятно, хотят удалить любые задние тире и периоды.

Также настоятельно рекомендую вам делать то, что так и другие делают, и включают уникальный идентификатор Другое , чем в заголовке, а затем только использовать только этот уникальный идентификатор при обработке URL. Итак http://example.com/articles/1234567/IS-The-pop-catholic (обратите внимание на отсутствующие «E») и http://example.com/articles/1234567/ Это-папа-католич разрешается на тот же ресурс.

38
ответ дан 30 November 2019 в 03:08
поделиться

Я бы делал:

string url = title;
url = Regex.Replace(url, @"^\W+|\W+$", "");
url = Regex.Replace(url, @"'\"", "");
url = Regex.Replace(url, @"_", "-");
url = Regex.Replace(url, @"\W+", "-");

в основном то, что это делает:

  • -wordword символов с самого начала и конца заголовка;
  • удаляет одиночные и двойные кавычки (главным образом, чтобы избавиться от апострофов в середине слов);
  • заменяет подчеркивание с помощью дефисов (подчеркивает технический характер цифры и буквы); И
  • заменяет все группы неразрушевых символов с одним дефисом.
2
ответ дан 30 November 2019 в 03:08
поделиться

Это то, как я в настоящее время пробивающую слов.

        public static string Slug(this string value)
    {
        if (value.HasValue())
        {
            var builder = new StringBuilder();
            var slug = value.Trim().ToLowerInvariant();

            foreach (var c in slug)
            {
                switch (c)
                {
                    case ' ':
                        builder.Append("-");
                        break;
                    case '&':
                        builder.Append("and");
                        break;
                    default:

                        if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') && c != '-')
                        {
                            builder.Append(c);
                        }

                        break;
                }
            }

            return builder.ToString();
        }

        return string.Empty;
    }
1
ответ дан 30 November 2019 в 03:08
поделиться

Пробовали ли вы управление Daypilot ? Есть бесплатная версия, можно попробовать.

-121--4551130-

Посмотрите на Деревья пальцев , особенно если вы поклонник ранее упомянутых структур чисто функциональных данных. Они являются функциональным представлением постоянных последовательностей, поддерживающих доступ к концам в амортизированное постоянное время, конкатенацию и разделение во времени логарифмическое в размере меньшего участка.

Согласно оригинальной статье :

Наши функциональные 2-3 пальцевые деревья являются экземпляром общей техники проектирования, введенной Окасаки (1998), называемой неявным рекурсивным замедлением . Мы уже отмечали, что эти деревья являются расширением его неявной дековой структуры, заменяя пары на 2-3 узла, чтобы обеспечить гибкость, необходимую для эффективной конкатенации и разделения.

Дерево пальцев может быть параметризовано моноидом , и использование различных моноидов приведет к различному поведению дерева. Это позволяет деревьям пальцев моделировать другие структуры данных.

-121--1768234-

Большинство «вялецов» (методы преобразования в понятные имена типов URL-адресов), как правило, делают следующее:

  1. Делайте все, кроме пробела, тире, подчеркивания и буквенно-цифровых символов.
  2. (Факультативно) Исключить «общие слова» (a, an, of и т.д.).
  3. Замените места и подчеркивания тире.
  4. (необязательно) Преобразовать в нижний регистр.

Насколько мне известно, вялитель StackOverflow делает # 1, # 3 и # 4, но не # 2.

1
ответ дан 30 November 2019 в 03:08
поделиться

Как насчет этого:

string FriendlyURLTitle(string pTitle)
{
    pTitle = pTitle.Replace(" ", "-");
    pTitle = HttpUtility.UrlEncode(pTitle);
    return Regex.Replace(pTitle, "\%[0-9A-Fa-f]{2}", "");
}
1
ответ дан 30 November 2019 в 03:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: