Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как переполнение стека генерирует свой SEO-дружественный URLs?
Что такое хорошее полное регулярное выражение или какой-то другой процесс, который взял бы название:
Как изменить заголовок, чтобы он был частью URL, как переполнение стека?
и превратить его в
how-do-you-change-a-title-to-be-part-of-the-url-like-stack-overflow
то есть используется в SEO-дружественном URLs на Stack Overflow?
Среда разработки, которую я использую, является Ruby на Rails, но если есть какие-то другие решения для конкретной платформы (.NET, PHP, Django), я бы тоже хотел их увидеть.
Я уверен, что я (или другой читатель) столкнусь с той же проблемой на другой платформе в будущем.
Я использую пользовательские маршруты, и я в основном хочу знать, как изменить строку, чтобы все специальные символы были удалены, все это строчные буквы, и все whitespace заменено.
Вот как мы это делаем. Обратите внимание, что существует, вероятно, больше граничных условий, чем вы понимаете на первый взгляд.
Это вторая версия, развернутая для 5-кратной большей производительности (и да, я провел ее бенчмаркинг). Я решил, что оптимизирую его, потому что эта функция может быть вызвана сотни раз на странице.
/// <summary>
/// Produces optional, URL-friendly version of a title, "like-this-one".
/// hand-tuned for speed, reflects performance refactoring contributed
/// by John Gietzen (user otac0n)
/// </summary>
public static string URLFriendly(string title)
{
if (title == null) return "";
const int maxlen = 80;
int len = title.Length;
bool prevdash = false;
var sb = new StringBuilder(len);
char c;
for (int i = 0; i < len; i++)
{
c = title[i];
if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
{
sb.Append(c);
prevdash = false;
}
else if (c >= 'A' && c <= 'Z')
{
// tricky way to convert to lowercase
sb.Append((char)(c | 32));
prevdash = false;
}
else if (c == ' ' || c == ',' || c == '.' || c == '/' ||
c == '\\' || c == '-' || c == '_' || c == '=')
{
if (!prevdash && sb.Length > 0)
{
sb.Append('-');
prevdash = true;
}
}
else if ((int)c >= 128)
{
int prevlen = sb.Length;
sb.Append(RemapInternationalCharToAscii(c));
if (prevlen != sb.Length) prevdash = false;
}
if (i == maxlen) break;
}
if (prevdash)
return sb.ToString().Substring(0, sb.Length - 1);
else
return sb.ToString();
}
Чтобы увидеть предыдущую версию кода, который был заменен (но функционально эквивалентен и в 5 раз быстрее), просмотрите историю изменений этого поста (щелкните ссылку дата).
Кроме того, исходный код метода RemapInternationalCharToAscii можно найти здесь .