C# 将字符串清理为url安全格式
我正在尝试清理一个字符串,以便可以将其放入URL中。这只是为了在URL中显示。现在我在PHP中使用了这个函数,效果很好: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, '-')
$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();
}