SOのslugタグを検索して閲覧したところ、説得力のある解決策が2つしか見つかりませんでした。
これは、問題の部分的な解決策にすぎません。これを自分で手動でコーディングすることもできますが、まだ解決策がないことに驚いています。
では、C# や .NET に、ラテン文字、Unicode、およびその他のさまざまな言語の問題に適切に対処する slugify アルゴリズムの実装はありますか?
SOのslugタグを検索して閲覧したところ、説得力のある解決策が2つしか見つかりませんでした。
これは、問題の部分的な解決策にすぎません。これを自分で手動でコーディングすることもできますが、まだ解決策がないことに驚いています。
では、C# や .NET に、ラテン文字、Unicode、およびその他のさまざまな言語の問題に適切に対処する slugify アルゴリズムの実装はありますか?
http://predicatet.blogspot.com/2009/04/improved-c-slug-generator-or-how-to.html
public static string GenerateSlug(this string phrase)
{
string str = phrase.RemoveAccent().ToLower();
// invalid chars
str = Regex.Replace(str, @"[^a-z0-9\s-]", "");
// convert multiple spaces into one space
str = Regex.Replace(str, @"\s+", " ").Trim();
// cut and trim
str = str.Substring(0, str.Length <= 45 ? str.Length : 45).Trim();
str = Regex.Replace(str, @"\s", "-"); // hyphens
return str;
}
public static string RemoveAccent(this string txt)
{
byte[] bytes = System.Text.Encoding.GetEncoding("Cyrillic").GetBytes(txt);
return System.Text.Encoding.ASCII.GetString(bytes);
}
ここでは、C# で URL スラッグを生成する方法を見つけます。この関数は、すべてのアクセントを削除し(マルセルの回答)、スペースを置き換え、無効な文字を削除し、ダッシュを最後から削除し、「-」または「_」の二重出現を置き換えます
コード:
public static string ToUrlSlug(string value){
//First to lower case
value = value.ToLowerInvariant();
//Remove all accents
var bytes = Encoding.GetEncoding("Cyrillic").GetBytes(value);
value = Encoding.ASCII.GetString(bytes);
//Replace spaces
value = Regex.Replace(value, @"\s", "-", RegexOptions.Compiled);
//Remove invalid chars
value = Regex.Replace(value, @"[^a-z0-9\s-_]", "",RegexOptions.Compiled);
//Trim dashes from end
value = value.Trim('-', '_');
//Replace double occurences of - or _
value = Regex.Replace(value, @"([-_]){2,}", "$1", RegexOptions.Compiled);
return value ;
}
slugification (新語!) で私が抱えていた問題の 1 つは、衝突です。たとえば、「Stack-Overflow」というブログ投稿と「Stack Overflow」というブログ投稿がある場合、これら 2 つのタイトルのスラッグは同じです。したがって、私のスラッグ ジェネレーターは通常、何らかの方法でデータベースを使用する必要があります。これが、より一般的なソリューションが見られない理由かもしれません。