Как отформатировать строку, чтобы она была частью URL?

2

Мне нужно удалить все символы, которые не могут быть частью URL-адресов, например пробелы, <, > и т.д.

Я получаю данные из базы данных.
Например, если извлеченные данные: Product #number 123!

новая строка должна быть: Номер продукта-123

Должен ли я использовать регулярное выражение? есть ли шаблон регулярных выражений для этого? Благодаря

  • 1
    Я так понимаю, вы хотите оптимизированную для SEO строку; не строка, сохраняющая данные (uri-escape-)?
  • 0
    да что-то подобное :)
Теги:

3 ответа

1
Лучший ответ

Легкое регулярное выражение для этого:

string cleaned = Regex.Replace(url, @"[^a-zA-Z0-9]+","-");
  • 1
    Да, это довольно просто, возможно, за этим следует замена последовательного «-». С макушки головы что-то вроде: cleaned = Regex.Replace(cleaned, @"--+",""); должен сделать свое дело.
  • 0
    Отредактировал ответ, чтобы включить мое предложение, как оно проверено. Надеюсь, ты не против :)
Показать ещё 4 комментария
2

Вот пример того, как создать строку, удобную для URL, из "нормальной" строки:

public static string GenerateSlug(string phrase)
{
    string str = phrase.ToLower();

    str = Regex.Replace(str, @"[^a-z0-9\s-]", ""); // invalid chars       
    str = Regex.Replace(str, @"\s+", " ").Trim(); // convert multiple spaces into one space
    str = str.Substring(0, str.Length <= 45 ? str.Length : 45).Trim(); // cut and trim it
    str = Regex.Replace(str, @"\s", "-"); // hyphens

    return str;
}

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

Источник

  • 3
    Может быть, стоит сделать замену для нескольких дефисов в конце вышеприведенного описания, или вы можете получить мое ---- имя ---- это тип urls.
  • 0
    Это проблема в других строках, кроме строк, в которых уже есть дефисы? "меня зовут"
Показать ещё 2 комментария
1

Чтобы просто выполнить замену специальных символов, таких как "<" вы можете использовать Server.UrlEncode(string s). И вы можете сделать обратное с помощью Server.UrlDecode(string s).

  • 0
    Похоже, он использует удобный для чтения (или SEO) URL, а не тот, который содержит все дополнительные символы. Хотя это будет работать, но не будет все это читабельным.
  • 0
    Это справедливо. Я явно пропустил эту часть вопроса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню