C# 在C中以智能方式删除所有有问题的字符#

C# 在C中以智能方式删除所有有问题的字符#,c#,.net,string,C#,.net,String,是否有任何.Net库可以删除字符串中所有有问题的字符,并以智能方式只保留字母数字、连字符和下划线(或类似子集)?这是用于URL、文件名等 我正在寻找类似的东西,可以做到以下几点: 简单的序曲 “简单英语”。收件人地址=> “简单英语” “这根本没什么”。to_url=> “没什么” “摇滚乐”。收件人地址=> “摇滚乐” 让我们来炫耀一下 “价值12美元的Ruby power”。收件人url=> “价值12美元的红宝石能量” “如果你现在行动,可以打九折”。to_url=> “如果你现在行动,可

是否有任何.Net库可以删除字符串中所有有问题的字符,并以智能方式只保留字母数字、连字符和下划线(或类似子集)?这是用于URL、文件名等

我正在寻找类似的东西,可以做到以下几点:

简单的序曲 “简单英语”。收件人地址=> “简单英语”

“这根本没什么”。to_url=> “没什么”

“摇滚乐”。收件人地址=> “摇滚乐”

让我们来炫耀一下 “价值12美元的Ruby power”。收件人url=> “价值12美元的红宝石能量”

“如果你现在行动,可以打九折”。to_url=> “如果你现在行动,可以打九折”

你甚至不想相信Iconv的下一部分 “用法语踢它”。到_url=> “用法语踢它”

“摇滚西班牙风格”。收件人url=> “摇滚爱斯帕诺风格”

“告诉你的读者你好".到_url=> “告诉你的读者倪昊”


您可以使用HTTPUtility.UrlEncode,但这将对所有内容进行编码,而不是替换或删除有问题的字符。因此,您的空格也将被编码为+和'。这不是一个解决方案,但可能是一个起点,如果目标是使字符串“安全”,我建议您可以尝试此方法

string str = phrase.ToLower();  //optional
str = str.Trim();
str = Regex.Replace(str, @"[^a-z0-9\s_]", ""); // invalid chars        
str = Regex.Replace(str, @"\s+", " ").Trim(); // convert multiple spaces into one space
str = str.Substring(0, str.Length <= 400 ? str.Length : 400).Trim(); // cut and trim it
str = Regex.Replace(str, @"\s", "-");
string str=phrase.ToLower();//可选
str=str.Trim();
str=Regex.Replace(str,@“[^a-z0-9\s!]”,“”);//无效字符
str=Regex.Replace(str,@“\s+”,“”)。Trim();//将多个空格转换为一个空格

str=str.Substring(0,str.Length从您的示例中,我发现的最接近的东西(尽管我不认为它能满足您的所有要求)是:

而且:

由于这两种解决方案都不能给出您想要的东西(从您问题中的示例来看),并且假设这里的目标是使您的字符串“安全”,因此我支持Hogan的建议,并同意,或者至少将其作为您自己创建的东西的基础,可能来自于库

下面是指向一个类的链接,该类构建了许多字符串扩展方法(如前两个示例),但利用了Microsoft的AntiXSS库:

当然,您可以将AntiXSS库中使用的算法(或类似的算法)与网站中经常使用的生成“slug”URL的算法相结合(很像堆栈溢出和许多博客平台)

下面是一个好的C#段塞发生器示例:


由于您正在声明要应用的特定规则,因此将没有能够满足您需要的库,例如$x=>x-dollars,x%=>x-percent。您几乎肯定需要编写自己的方法来实现这一点。这应该不会太难。字符串扩展方法和使用一个或多个正则表达式进行替换w这可能是一种非常简洁的方式

e、 g


Ruby版本没有明确说明(但最初的Perl版本有)的一点是,它用于音译非罗马字符的算法故意过于简单——“总比没有好”“在两种意义上。例如,虽然它的中文音译能力有限,但它完全不区分上下文——因此,如果你给它输入日语文本,那么你就会胡言乱语。”


这种简单化特性的优点是实现起来非常简单。您只需要一个包含Unicode字符及其对应ASCII“等价物”的大表。您可以直接从Perl(或Ruby)中获取这一点如果您决定自己实现此功能,请参阅源代码。

也许这里的问题可以帮助您解决问题。它提供了有关Stackoverflow如何生成其url的代码(更具体地说,是如何将问题名转换为漂亮的url的)


我在我的博客中使用了类似的东西

public class Post
{

    public string Subject { get; set; }

    public string ResolveSubjectForUrl()
    {
        return Regex.Replace(Regex.Replace(this.Subject.ToLower(), "[^\\w]", "-"), "[-]{2,}", "-");
    }

}

我找不到任何可以这样做的库,就像在Ruby中一样,所以我结束了编写自己的方法。这就是它,以防有人关心:

/// <summary>
/// Turn a string into something that's URL and Google friendly.
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string ForUrl(this string str) {
  return str.ForUrl(true);
}
public static string ForUrl(this string str, bool MakeLowerCase) {
  // Go to lowercase.
  if (MakeLowerCase) {
    str = str.ToLower();
  }

  // Replace accented characters for the closest ones:
  char[] from = "ÂÃÄÀÁÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöøùúûüýÿ".ToCharArray();
  char[] to = "AAAAAACEEEEIIIIDNOOOOOOUUUUYaaaaaaceeeeiiiidnoooooouuuuyy".ToCharArray();
  for (int i = 0; i < from.Length; i++) {
    str = str.Replace(from[i], to[i]);
  }

  // Thorn http://en.wikipedia.org/wiki/%C3%9E
  str = str.Replace("Þ", "TH");
  str = str.Replace("þ", "th");

  // Eszett http://en.wikipedia.org/wiki/%C3%9F
  str = str.Replace("ß", "ss");

  // AE http://en.wikipedia.org/wiki/%C3%86
  str = str.Replace("Æ", "AE");
  str = str.Replace("æ", "ae");

  // Esperanto http://en.wikipedia.org/wiki/Esperanto_orthography
  from = "ĈĜĤĴŜŬĉĝĥĵŝŭ".ToCharArray();
  to = "CXGXHXJXSXUXcxgxhxjxsxux".ToCharArray();
  for (int i = 0; i < from.Length; i++) {
    str = str.Replace(from[i].ToString(), "{0}{1}".Args(to[i*2], to[i*2+1]));
  }

  // Currencies.
  str = new Regex(@"([¢€£\$])([0-9\.,]+)").Replace(str, @"$2 $1");
  str = str.Replace("¢", "cents");
  str = str.Replace("€", "euros");
  str = str.Replace("£", "pounds");
  str = str.Replace("$", "dollars");

  // Ands
  str = str.Replace("&", " and ");

  // More aesthetically pleasing contractions
  str = str.Replace("'", "");
  str = str.Replace("’", "");

  // Except alphanumeric, everything else is a dash.
  str = new Regex(@"[^A-Za-z0-9-]").Replace(str, "-");

  // Remove dashes at the begining or end.
  str = str.Trim("-".ToCharArray());

  // Compact duplicated dashes.
  str = new Regex("-+").Replace(str, "-");

  // Let's url-encode just in case.
  return str.UrlEncode();
}
//
///将字符串转换为URL和Google友好的内容。
/// 
/// 
/// 
公共静态字符串ForUrl(此字符串str){
返回str.ForUrl(true);
}
公共静态字符串ForUrl(此字符串str,bool MakeLowerCase){
//用小写字母。
if(小写){
str=str.ToLower();
}
//将重音字符替换为最近的字符:
char[]来自;
char[]to=“aaaaaa ceeeeiiidnooooouuuuuyaaaaaaceeeiiidnooouuuuuyy”。ToCharArray();
for(int i=0;i/// <summary>
/// Turn a string into something that's URL and Google friendly.
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string ForUrl(this string str) {
  return str.ForUrl(true);
}
public static string ForUrl(this string str, bool MakeLowerCase) {
  // Go to lowercase.
  if (MakeLowerCase) {
    str = str.ToLower();
  }

  // Replace accented characters for the closest ones:
  char[] from = "ÂÃÄÀÁÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöøùúûüýÿ".ToCharArray();
  char[] to = "AAAAAACEEEEIIIIDNOOOOOOUUUUYaaaaaaceeeeiiiidnoooooouuuuyy".ToCharArray();
  for (int i = 0; i < from.Length; i++) {
    str = str.Replace(from[i], to[i]);
  }

  // Thorn http://en.wikipedia.org/wiki/%C3%9E
  str = str.Replace("Þ", "TH");
  str = str.Replace("þ", "th");

  // Eszett http://en.wikipedia.org/wiki/%C3%9F
  str = str.Replace("ß", "ss");

  // AE http://en.wikipedia.org/wiki/%C3%86
  str = str.Replace("Æ", "AE");
  str = str.Replace("æ", "ae");

  // Esperanto http://en.wikipedia.org/wiki/Esperanto_orthography
  from = "ĈĜĤĴŜŬĉĝĥĵŝŭ".ToCharArray();
  to = "CXGXHXJXSXUXcxgxhxjxsxux".ToCharArray();
  for (int i = 0; i < from.Length; i++) {
    str = str.Replace(from[i].ToString(), "{0}{1}".Args(to[i*2], to[i*2+1]));
  }

  // Currencies.
  str = new Regex(@"([¢€£\$])([0-9\.,]+)").Replace(str, @"$2 $1");
  str = str.Replace("¢", "cents");
  str = str.Replace("€", "euros");
  str = str.Replace("£", "pounds");
  str = str.Replace("$", "dollars");

  // Ands
  str = str.Replace("&", " and ");

  // More aesthetically pleasing contractions
  str = str.Replace("'", "");
  str = str.Replace("’", "");

  // Except alphanumeric, everything else is a dash.
  str = new Regex(@"[^A-Za-z0-9-]").Replace(str, "-");

  // Remove dashes at the begining or end.
  str = str.Trim("-".ToCharArray());

  // Compact duplicated dashes.
  str = new Regex("-+").Replace(str, "-");

  // Let's url-encode just in case.
  return str.UrlEncode();
}