c# - 将标题转换为虚线的 URL 友好字符串

标签 c# replace

<分区>

我想编写一个 C# 方法,将任何标题转换为 URL 友好字符串,类似于 Stack Overflow 所做的:

  • 用破折号替换空格
  • 去掉括号
  • 等等

我正在考虑根据 RFC 3986 标准(来自 Wikipedia )删除保留字符,但我不知道这是否足够?它会使链接可用,但有谁知道在 stackoverflow 上替换了哪些其他字符?我不想在我的 URL 中以 %-s 结尾...

当前实现

string result = Regex.Replace(value.Trim(), @"[!*'""`();:@&+=$,/\\?%#\[\]<>«»{}_]");
return Regex.Replace(result.Trim(), @"[\s*[\-–—\s]\s*]", "-");

我的问题

  1. 我应该删除哪些字符?
  2. 我应该限制结果字符串的最大长度吗?
  3. 有人知道 SO 上的标题适用哪些规则吗?

最佳答案

unreserved chars is so short 的列表不是寻找要替换的东西,而是一个非常清晰的正则表达式。

return Regex.Replace(value, @"[^A-Za-z0-9_\.~]+", "-");

(请注意,我没有在允许的字符列表中包含破折号;因此它会被“1 个或多个”运算符 [+] 吞噬,以便多个破折号(在原始的或生成的或组合)被折叠,根据 Dominic Rodger 的精彩观点。)

您可能还想删除常用词(“the”、“an”、“a”等),尽管这样做会略微改变句子的意思。可能还想删除所有结尾的破折号和句点。

还强烈建议您按照 SO 和其他人的做法,包括标题以外的唯一标识符,然后仅在处理 URL 时使用该唯一 ID。所以 http://example.com/articles/1234567/is-the-pop-catholic(注意缺少的“e”)和 http://example.com/articles/1234567/is-the-pope-catholic 解析为同一资源。

关于c# - 将标题转换为虚线的 URL 友好字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2161684/

相关文章:

c# - 工具提示显示错误的日期时间

c# - 从另一个表单刷新 dataGridView 的数据源

c# - 将 .exe 作为单个文件发布到文件夹时如何减小其大小

javascript - 如何用jquery替换一个字符串中可以变化的字符

javascript - jQuery 在字符串单击、添加或删除文本区域内匹配的文本

mysql - 表达式中的 REPLACE 和 IF 会导致上一行的串联

c# - 在 SQL smo 中迭代所有表时如何仅识别基表?

c# - 为什么 WinForms 设计器中的控件会自行调整大小?

javascript - jquery 用 noimage 图标替换损坏的图像

regex - 在 Sublime Text 中使用正则表达式进行搜索和替换