我正在尝试清理字符串,以便可以将其放入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
答案 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();
}