作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
如何在 C# 中生成友好 URL?目前我只是用下划线替换空格,但我将如何生成类似于 Stack Overflow 的 URL?
例如我如何转换:
How do I generate a Friendly URL in C#?
进入
how-do-i-generate-a-friendly-url-in-C
最佳答案
不过,Jeff 的解决方案中有几处可以改进。
if (String.IsNullOrEmpty(title)) return "";
恕我直言,不是测试这个的地方。如果函数传递了一个空字符串,无论如何都会出现严重错误。抛出错误或根本不使用react。
// 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,}", "-");
同样,基本上是两倍的工作:首先,使用正则表达式一次替换多个空格。然后,再次使用正则表达式一次替换多个破折号。两个要解析的表达式,两个要在内存中构造的自动机,对字符串进行两次迭代,创建两个字符串:所有这些操作都可以合并为一个。
在我的脑海中,没有任何测试,这将是一个等效的解决方案:
// 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;
请注意,此方法尽可能使用字符串函数而不是正则表达式函数,并使用字符函数而不是字符串函数。
关于c# - 如何在 C# 中生成友好 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37809/
我是一名优秀的程序员,十分优秀!