Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //http://stackoverflow.com/questions/25259/how-does-stack-overflow-generate-its-seo-friendly-urls/25063322#25063322
- public static string ToFriendlyUrl(string title, bool utf8 = false, int maxlen=80)
- {
- if (title == null) return "";
- int len = title.Length;
- bool prevdash = false;
- var sb = new StringBuilder(len);
- char c;
- for (int i = 0; i < len; i++)
- {
- c = title[i];
- if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
- {
- sb.Append(c);
- prevdash = false;
- }
- else if (c >= 'A' && c <= 'Z')
- {
- // tricky way to convert to lowercase
- sb.Append((char)(c | 32));
- prevdash = false;
- }
- else if (c == ' ' || c == ',' || c == '.' || c == '/' ||
- c == '\\' || c == '-' || c == '_' || c == '=')
- {
- if (!prevdash && sb.Length > 0)
- {
- sb.Append('-');
- prevdash = true;
- }
- }
- else if (c >= 128)
- {
- int prevlen = sb.Length;
- if (utf8)
- {
- sb.Append(HttpUtility.UrlEncode(c.ToString(CultureInfo.InvariantCulture),Encoding.UTF8));
- }
- else
- {
- //http://meta.stackexchange.com/questions/7435/non-us-ascii-characters-dropped-from-full-profile-url/7696#7696
- sb.Append(RemapInternationalCharToAscii(c));
- }
- if (prevlen != sb.Length) prevdash = false;
- }
- if (i == maxlen) break;
- }
- if (prevdash)
- return sb.ToString().Substring(0, sb.Length - 1);
- else
- return sb.ToString();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement