public static string ShortenUrl(string url, int max)
{
if (url.Length <= max)
return url;
// Remove the protocal
int startIndex = url.IndexOf("://");
if (startIndex > -1)
url = url.Substring(startIndex + 3);
if (url.Length <= max)
return url;
// Remove the folder structure
int firstIndex = url.IndexOf("/") + 1;
int lastIndex = url.LastIndexOf("/");
if (firstIndex < lastIndex)
url = url.Replace(url.Substring(firstIndex, lastIndex - firstIndex), "...");
if (url.Length <= max)
return url;
// Remove URL parameters
int queryIndex = url.IndexOf("?");
if (queryIndex > -1)
url = url.Substring(0, queryIndex);
if (url.Length <= max)
return url;
// Remove URL fragment
int fragmentIndex = url.IndexOf("#");
if (fragmentIndex > -1)
url = url.Substring(0, fragmentIndex);
if (url.Length <= max)
return url;
// Shorten page
firstIndex = url.LastIndexOf("/") + 1;
lastIndex = url.LastIndexOf(".");
if (lastIndex - firstIndex > 10)
{
string page = url.Substring(firstIndex, lastIndex - firstIndex);
int length = url.Length - max + 3;
if(length<page.Length)//If page length is longer then max length, can not shorten it
url = url.Replace(page, "..." + page.Substring(length));
}
return url;
}