Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

URL Slugify algorithm in C#?

Tags:

c#

slug

So I have searched and browsed through the slug tag on SO and only found two compelling solution:

  • Slugify and Character Transliteration in C#
  • How to convert super- or subscript to normal text in C#

Which are but partial solution to the problem. I could manually code this up myself but I'm surprised that there isn't already a solution out there yet.

So, is there a slugify alrogithm implementation in C# and/or .NET that properly address latin characters, unicode and various other language issues properly?

like image 794
chakrit Avatar asked May 27 '10 11:05

chakrit


2 Answers

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);  } 
like image 190
Marcel Avatar answered Oct 08 '22 17:10

Marcel


Here you find a way to generate url slug in c#. This function remove all accents(Marcel's answer), replace spaces, remove invalid chars, trim dashes from end and replace double occurences of "-" or "_"

Code:

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 ;     } 
like image 28
Joan Caron Avatar answered Oct 08 '22 17:10

Joan Caron