【问题标题】:C# Recommended way of performing a custom encoding of a stringC# 推荐的执行字符串自定义编码的方法
【发布时间】:2012-06-01 14:54:36
【问题描述】:

所以,我的问题很简单。我有一个字符串,我希望能够在 url 中使用它。很简单,对吧?然而,棘手的部分是,我想要一种自定义的编码方式。你看,我的语言充满了é,í,ô,ä,ľ,š,č,ť......,你明白了。

所以,假设我有一个这样的字符串:

Čečenský bojovník sa pobil v košickej väzbe

如果我使用 HttpUtility.EncodeUrl,我会得到这个字符串:

%c4%8ce%c4%8densk%c3%bd+bojovn%c3%adk+sa+pobil+v+ko%c5%a1ickej+v%c3%a4zbe

但是,我想要的字符串应该是这样的(尽量使用用户友好的 url):

cecensky-bojovnik-sa-pobil-v-kosickej-vazbe

那么使用函数 EncodeUrl 不是一个选项。因此,我为自己编写了一个函数来对字符串进行多次操作,这正是我需要的。

public static string EncodeForUrl(this string s)
{
    string temp = s.StripDiacritics();  // one custom function
    temp = temp.ToLower();
    temp = temp.Trim();
    temp = temp.Replace(" ", "-");
    return temp;
}

我认为发生了什么很明显,而且效果很好。好吧,除了字符串是不可变的,所以会有很多不必要的内存分配。

所以最后我提出了我的问题 - 是否有一些推荐的、更有效的方法来做到这一点?

【问题讨论】:

  • @RayCheng,关于删除变音符号,我已经实现了一个函数。我真的不需要更多功能来做到这一点,我的工作正常。我的问题是关于另一件事 - 实现我需要的字符串编码格式的最佳实践是什么。感谢您的评论...
  • @renamr,这似乎和我现在做的完全一样,只是在游戏中引入了正则表达式。它有更多的内存分配正在进行。正则表达式会比我已经在我的代码中使用的字符串操作快得多吗?

标签: c# string url encoding diacritics


【解决方案1】:

经过一番谷歌搜索,我终于找到了满足我需求的答案。 Stackoverflow 处理这种情况的方式可能是最好的。

How does Stack Overflow generate its SEO-friendly URLs?

这用于剥离变音符号,甚至比我当前的版本更好

https://meta.stackexchange.com/questions/7435/non-us-ascii-characters-dropped-from-full-profile-url/7696#7696

【讨论】:

    【解决方案2】:

    您可以跳过 ToLower() 而不是使用 Replace() 您可以执行类似的操作:https://stackoverflow.com/a/5203674/730701

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 2012-11-29
      • 2020-08-06
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多