Как перевести «Lorem 3 ipsum dolor sit amet» в SEO-дружественную версию «Lorem-3-ipsum-dolor-sit-amet» на Java? - PullRequest
1 голос
/ 07 сентября 2010

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

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

Если они вводят что-то вроде

Lorem 3 ipsum dolor sit amet

, как я могу создатьболее SEO-версия этого текста:

Lorem-3-ipsum-dolor-sit-amet

Ответы [ 3 ]

7 голосов
/ 07 сентября 2010

На практике это на самом деле не так просто, как замена пробелов гипсами.Вы также часто хотели бы сделать все это строчными буквами и нормализовать / заменить диакритические знаки, такие как, ö, è и т. Д., Которые являются недействительными символами URL.Единственные допустимые символы перечислены как «Незарезервированные символы» во 2-й таблице этой страницы Википедии .

Вот как может выглядеть такая функция:

public static String prettyURL(String string) {
    return Normalizer.normalize(string.toLowerCase(), Form.NFD)
        .replaceAll("\\p{InCombiningDiacriticalMarks}+", "")
        .replaceAll("[^\\p{Alnum}]+", "-");
}

Это в основном следующее:

  • строчная строка
  • удалить объединяющие диакритические знаки (после того, как нормализатор "извлечет" их из действительных символов)
  • заменить не буквенно-цифровые символы дефисами

См. Также:

4 голосов
/ 07 сентября 2010
String s = "Lorem 3 ipsum dolor sit amet"
s = s.replaceAll(" ","-");
0 голосов
/ 07 сентября 2010

Поскольку это не позволяет мне комментировать.Я бы сделал:

String s = "Lorem 3 ipsum dolor sit amet"
s = s.replaceAll(" ","_");

Используя вместо этого символ подчеркивания, потому что это пробел.Прошло много времени с тех пор, как я сделал java, но я знаю, что в .Net есть функция, которая очистит имя файла, чтобы оно было безопасно для файловой системы.Многие общие правила применяются к URL-адресу, поэтому, если вы найдете его в API, стоит взглянуть.

...