我想编写一个C#方法,将任何标题转换为URL友好字符串,类似于stackoverflow的作用:
我正在考虑按照RFC 3986标准(来自维基百科)删除保留字符,但我不知道这是否足够?它会使链接可行,但有没有人知道堆栈溢出这里有什么其他字符被替换?我不希望在我的网址中以%-s结尾...
string result = Regex.Replace(value.Trim(), @"[!*'""`();:@&+=$,/\\?%#\[\]<>«»{}_]");
return Regex.Replace(result.Trim(), @"[\s*[\-–—\s]\s*]", "-");
Run Code Online (Sandbox Code Playgroud)
一个子问题
我是否应该将此问题转移到元,即使它与编程相关?
T.J*_*der 38
没有寻找要替换的东西,而不是未预留的字符列表是如此之短,它将成为一个很好的清晰正则表达式.
return Regex.Replace(value, @"[^A-Za-z0-9_\.~]+", "-");
Run Code Online (Sandbox Code Playgroud)
(请注意,我没有在允许的字符列表中包含短划线;因此它被"1或更多"运算符[ +] 吞噬,以便折叠多个破折号(原始或生成或组合中),根据多米尼克罗杰的优点.)
您可能还想删除常用词("the","an","a"等),尽管这样做可能会略微改变句子的含义.可能还想删除任何尾随破折号和句号.
此外强烈建议你做什么,所以和别人做的,包括一个唯一的标识符其他比标题,然后只处理URL时使用该唯一的ID.所以http://example.com/articles/1234567/is-the-pop-catholic(注意缺少'e')并http://example.com/articles/1234567/is-the-pope-catholic解析为相同的资源.