C# 执行字符串自定义编码的推荐方法

本文关键字:方法 编码 执行 字符串 自定义 | 更新日期: 2023-09-27 18:35:28

所以,我的问题相当简单。我有一个字符串,我希望能够在 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;
}

我认为正在发生的事情很明显,而且效果很好。好吧,除了字符串是不可变的这一事实,所以有很多不必要的内存分配正在进行。

所以最后我回答了我的问题 - 是否有一些推荐的、更有效的方法?

C# 执行字符串自定义编码的推荐方法

你可以跳过 ToLower(),而不是使用 Replace(),你可以做类似的事情: https://stackoverflow.com/a/5203674/730701

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

Stack Overflow如何生成其SEO友好的URL?

这是为了剥离变音符号,甚至比我当前的版本更好

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