如何在C#中生成一个友好的URL?

如何在C#中生成一个友好的URL?

How do I generate a Friendly URL in C#?

如何在C#中生成友好的URL? 目前,我简单地用下划线替换空格,但是如何生成类似于Stack Overflow的URL?

例如,如何转换:

How do I generate a Friendly URL in C#?

进入

how-do-i-generate-a-friendly-url-in-C


不过,Jeff的解决方案中有几处可以改进。

1
if (String.IsNullOrEmpty(title)) return"";

恕我直言,不是测试的地方。如果该函数传递了一个空字符串,则无论如何都会出现严重错误。抛出错误或完全不反应。

1
2
3
// remove any leading or trailing spaces left over
… muuuch later:
// remove trailing dash, if there is one

两次工作。考虑到每个操作都会创建一个全新的字符串,即使性能不是问题,这也很糟糕。

1
2
3
4
// 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,}","-");

再次,基本上是工作的两倍:首先,使用正则表达式一次替换多个空格。然后,再次使用正则表达式一次替换多个破折号。解析两个表达式,在内存中构造两个自动机,在字符串上迭代两次,创建两个字符串:所有这些操作都可以折叠为一个。

我不需任何测试就可以解决这个问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;


这是其中的一部分(使用有效字符的白名单):

1
new Regex("[^a-zA-Z-_]").Replace(s,"-")

但是,它确实为您提供了以"-"结尾的字符串。因此,也许要使用第二个正则表达式来从字符串的开头/结尾修剪掉它们,并可能将任何内部的"-"替换为"-"。


这是一个简单的函数,可以将您的字符串转换为Url,您只需要传递标题或字符串即可将其转换为用户友好的Url。

1
2
3
4
5
6
7
8
    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();
    }


推荐阅读

    linux命令时间转换?

    linux命令时间转换?,时间,系统,命令,信息,国家,大陆,概念,终端,时区,时分,Lin

    linux命令时间戳转换?

    linux命令时间戳转换?,时间,系统,地址,信息,工作,代码,标准,工具,形态,命令,l

    linux转换行列命令?

    linux转换行列命令?,工作,地址,信息,网络,系统,命令,标准,电脑,环境,目录,lin

    linux生成应用命令?

    linux生成应用命令?,地址,系统,工作,命令,名字,名称,首次,管理,文件,数据,lin

    linux地址转换命令?

    linux地址转换命令?,地址,系统,代码,信息,设备,网络,服务,密码,状态,报告,lin

    linux生成数字命令?

    linux生成数字命令?,密码,数字,设备,环境,名称,时间,单位,地址,信息,系统,求

    转换格式命令linux?

    转换格式命令linux?,系统,情况,地址,命令,设备,工作,基础,发行,工具,数据,Lin

    linux替换空格命令?

    linux替换空格命令?,电脑,名字,软件,命令,空格,文件,数字,灵活,系统,名称,lin

    linux转换图形命令?

    linux转换图形命令?,系统,工作,密码,工具,地址,命令,地方,环境,软件,信息,Lin

    linux时间转换命令?

    linux时间转换命令?,时间,系统,国家,大陆,命令,信息,标准,电脑,时区,终端,lin

    linux命令模式转换?

    linux命令模式转换?,工作,系统,数据,标准,命令,地址,信息,模式,设备,密码,lin

    linux转换盘符命令?

    linux转换盘符命令?,管理,系统,电脑,数据,情况,工作,磁盘,分区,工具,环境,怎

    linux文件转换的命令?

    linux文件转换的命令?,系统,情况,工作,命令,基础,发行,名称,信息,文件,格式,

    Python下划线的五个作用

    Python下划线的五个作用,代码,数字,位置,智能,培训,变量,中间,表示,后面,作

    python之转换大小写

    python之转换大小写,预期,数字,培训,字符串,方法,大小写,结果,下面,不得而

    Python实现文章自动生成

    Python实现文章自动生成,分析,数据,培训,文章,模型,概率,事件,词语,字典,函

    Python生成器

    Python生成器,生成器,培训,对象,元素,特性,除此之外,函数,能力,有去无回,简