C# 将字符串清理为url安全格式

C# 将字符串清理为url安全格式,c#,asp.net,C#,Asp.net,我正在尝试清理一个字符串,以便可以将其放入URL中。这只是为了在URL中显示。现在我在PHP中使用了这个函数,效果很好: $CleanString = IconV('UTF-8', 'ASCII//TRANSLIT//IGNORE', $String); $CleanString = Preg_Replace("/[^a-zA-Z0-9\/_|+ -]/", '', $CleanString); $CleanString = StrToLower( Trim($CleanString, '-')

我正在尝试清理一个字符串,以便可以将其放入URL中。这只是为了在URL中显示。现在我在PHP中使用了这个函数,效果很好:

$CleanString = IconV('UTF-8', 'ASCII//TRANSLIT//IGNORE', $String);
$CleanString = Preg_Replace("/[^a-zA-Z0-9\/_|+ -]/", '', $CleanString);
$CleanString = StrToLower( Trim($CleanString, '-') );
$CleanString = Preg_Replace("/[\/_|+ -]+/", $Delimiter, $CleanString);
现在我试着用C#,正则表达式没有问题,但是第一行有点棘手。用普通的等效字符替换字符“eáó”的安全方法是什么

例如,上述内容将:

The cát ís running & getting away


CharUnicodeInfo.getUnicodeCegory(c)
方法可以告诉您字符是否是“非间隔标记”。只有当字符串的重音(“变音”)与其字母分开时,才能使用此选项,这可以通过
Normalize(NormalizationForm.FormD)
获得

以下是完整的字符串扩展方法:

using System.Text;
using System.Globalization;
...

public static string RemoveDiacritics(this string strThis)
{
    if (strThis == null)
        return null;

    var sb = new StringBuilder();

    foreach (char c in strThis.Normalize(NormalizationForm.FormD))
    {
        if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
            sb.Append(c);
    }
    return sb.ToString();
}

退房:谢谢!这将是一个很好的解决办法。但是,您可以根据需要通过在foreach块中添加对
unicodegory.othersparcing>的检查来改进它。这将删除那些可能导致IIS抛出错误的恼人的&、逗号、额外破折号等。但是如果您使用它,请不要忘记在返回值时通过执行
return sb.ToString().replace(“,”)
或类似操作来替换双空格。
using System.Text;
using System.Globalization;
...

public static string RemoveDiacritics(this string strThis)
{
    if (strThis == null)
        return null;

    var sb = new StringBuilder();

    foreach (char c in strThis.Normalize(NormalizationForm.FormD))
    {
        if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
            sb.Append(c);
    }
    return sb.ToString();
}