如何在C#中生成友好URL?目前我简单地用下划线替换空格,但是我如何生成像Stack Overflow这样的URL?
例如我如何转换:
如何在C#中生成友好URL?
向
如何-DO-I-生成-A-友好-URL-在-C
答案 0 :(得分:47)
但是,Jeff的解决方案有几个方面可以改进。
if (String.IsNullOrEmpty(title)) return "";
恕我直言,不是测试这个的地方。如果函数传递一个空字符串,那么无论如何都会出现严重错误。抛出错误或根本不做出反应。
// remove any leading or trailing spaces left over
… muuuch later:
// remove trailing dash, if there is one
两次工作。考虑到每个操作都会创建一个全新的字符串,这很糟糕,即使性能不是问题。
// replace spaces with single dash
title = Regex.Replace(title, @"\s+", "-");
// if we end up with multiple dashes, collapse to single dash
title = Regex.Replace(title, @"\-{2,}", "-");
同样,基本上是两倍的工作:首先,使用正则表达式一次替换多个空格。然后,再次使用regex一次替换多个破折号。解析两个表达式,在内存中构造两个自动机,在字符串上迭代两次,创建两个字符串:所有这些操作都可以折叠为一个。
离开我的头顶,没有任何测试,这将是一个等效的解决方案:
// make it all lower case
title = title.ToLower();
// remove entities
title = Regex.Replace(title, @"&\w+;", "");
// remove anything that is not letters, numbers, dash, or space
title = Regex.Replace(title, @"[^a-z0-9\-\s]", "");
// replace spaces
title = title.Replace(' ', '-');
// collapse dashes
title = Regex.Replace(title, @"-{2,}", "-");
// trim excessive dashes at the beginning
title = title.TrimStart(new [] {'-'});
// if it's too long, clip it
if (title.Length > 80)
title = title.Substring(0, 79);
// remove trailing dashes
title = title.TrimEnd(new [] {'-'});
return title;
请注意,此方法尽可能使用字符串函数而不是正则函数和char函数而不是字符串函数。
答案 1 :(得分:18)
这是我们如何做到的。请注意,乍看之下可能存在更多边缘条件。
if (String.IsNullOrEmpty(title)) return "";
// remove entities
title = Regex.Replace(title, @"&\w+;", "");
// remove anything that is not letters, numbers, dash, or space
title = Regex.Replace(title, @"[^A-Za-z0-9\-\s]", "");
// remove any leading or trailing spaces left over
title = title.Trim();
// replace spaces with single dash
title = Regex.Replace(title, @"\s+", "-");
// if we end up with multiple dashes, collapse to single dash
title = Regex.Replace(title, @"\-{2,}", "-");
// make it all lower case
title = title.ToLower();
// if it's too long, clip it
if (title.Length > 80)
title = title.Substring(0, 79);
// remove trailing dash, if there is one
if (title.EndsWith("-"))
title = title.Substring(0, title.Length - 1);
return title;
答案 2 :(得分:5)
这是其中的一部分(使用有效字符的白名单):
new Regex("[^a-zA-Z-_]").Replace(s, "-")
但是,它会给你一个以“ - ”结尾的字符串。所以也许是第二个正则表达式来修剪字符串的开头/结尾,并且可能将任何内部“ - ”替换为“ - ”。
答案 3 :(得分:0)
这是一个简单的函数,可以将您的字符串转换为Url,您只需要传递标题或字符串即可将其转换为用户友好的Url。
public static string GenerateUrl(string Url)
{
string UrlPeplaceSpecialWords = Regex.Replace(Url, @""|['"",&?%\.!()@$^_+=*:#/\\-]", " ").Trim();
string RemoveMutipleSpaces = Regex.Replace(UrlPeplaceSpecialWords, @"\s+", " ");
string ReplaceDashes = RemoveMutipleSpaces.Replace(" ", "-");
string DuplicateDashesRemove = ReplaceDashes.Replace("--", "-");
return DuplicateDashesRemove.ToLower();
}