gpt4 book ai didi

regex - Stack Overflow 如何生成其对 SEO 友好的 URL?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:26:45 25 4
gpt4 key购买 nike

什么是好的完整regular expression或其他一些将采用标题的过程:

How do you change a title to be part of the URL like Stack Overflow?

然后把它变成

how-do-you-change-a-title-to-be-part-of-the-url-like-stack-overflow

在 Stack Overflow 上的 SEO 友好 URL 中使用的是什么?

我使用的开发环境是Ruby on Rails ,但如果有其他一些特定于平台的解决方案(.NET、PHP、Django),我也很乐意看到这些。

我相信我(或其他读者)会在不同的平台上遇到同样的问题。

我正在使用自定义路由,我主要想知道如何将字符串更改为删除所有特殊字符,全部小写,并替换所有空格。

最佳答案

这是我们的做法。请注意,边缘条件的数量可能比您第一眼看到的要多。

这是第二个版本,展开后性能提高了 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 方法源代码可以找到here .

关于regex - Stack Overflow 如何生成其对 SEO 友好的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com