如何在 C# 中生成友好 URL?
如何在 C# 中生成友好 URL? 目前,我简单地将空格替换为下划线,但是我将如何生成像 Stack Overflow 一样的 URL?
例如我如何转换:
如何在 C# 中生成友好 URL?
进入
如何在 C 语言中生成友好的 url
How can I go about generating a Friendly URL in C#? Currently I simple replace spaces with an underscore, but how would I go about generating URL's like Stack Overflow?
For example how can I convert:
How do I generate a Friendly URL in C#?
Into
how-do-i-generate-a-friendly-url-in-C
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是一个简单的函数,可以将字符串转换为 Url,您只需要传递标题或字符串,它就会将其转换为用户友好的 Url。
here is a simple function which can convert your string to Url, you just need to pass title or string it will convert it to user friendly Url.
这只是其中的一部分(使用有效字符的白名单):
但是,它确实为您提供了一个以“--”结尾的字符串。 因此,也许第二个正则表达式可以从字符串的开头/结尾修剪这些内容,并且可能将任何内部“--”替换为“-”。
This gets part of the way there (using a whitelist of valid characters):
It does, however, give you a string that ends with "--". So perhaps a second regex to trim those from the beginning/end of the string, and maybe replace any internal "--" to "-".
我们是这样做的。 请注意,边缘条件可能比您乍一看意识到的要多。
Here's how we do it. Note that there are probably more edge conditions than you realize at first glance..
不过,杰夫的解决方案中有几处可以改进的地方。
恕我直言,不是测试这个的地方。 如果函数传递了一个空字符串,无论如何都会出现严重错误。 抛出错误或者根本不做出反应。
工作量加倍。 考虑到每个操作都会创建一个全新的字符串,这很糟糕,即使性能不是问题。
同样,基本上是两倍的工作:首先,使用正则表达式一次替换多个空格。 然后,再次使用正则表达式一次替换多个破折号。 要解析的两个表达式、在内存中构造的两个自动机、在字符串上迭代两次、创建两个字符串:所有这些操作都可以折叠为一个操作。
在我的脑海中,无需任何测试,这将是一个等效的解决方案:
请注意,此方法尽可能使用字符串函数而不是正则表达式函数,使用字符函数而不是字符串函数。
There are several things that could be improved in Jeff's solution, though.
IMHO, not the place to test this. If the function gets passed an empty string, something went seriously wrong anyway. Throw an error or don't react at all.
Twice the work. Considering that each operation creates a whole new string, this is bad, even if performance is not an issue.
Again, basically twice the work: First, use regex to replace multiple spaces at once. Then, use regex again to replace multiple dashes at once. Two expressions to parse, two automata to construct in memory, iterate twice over the string, create two strings: All these operations can be collapsed to a single one.
Off the top of my head, without any testing whatsoever, this would be an equivalent solution:
Notice that this method uses string functions instead of regex functions and char functions instead of string functions whenever possible.