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

时间:2011-07-16 10:44:00

标签: 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, '-') );
$CleanString = Preg_Replace("/[\/_|+ -]+/", $Delimiter, $CleanString);

现在我试图把它放在C#中,正则表达式没问题,但第一行有点棘手。将字符替换为正常等价物的安全方法是什么?

例如,上面将转换:

The cát ís running & getting away

the-cat-is-running-getting-away

1 个答案:

答案 0 :(得分:3)

CharUnicodeInfo.GetUnicodeCategory(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();
}