Files
Hua.DotNet.Code/Helper/Html/ResolveLinksHelper.cs

86 lines
2.0 KiB
C#

using System.Globalization;
using System.Text.RegularExpressions;
namespace Hua.DotNet.Code.Helper.Html;
public class ResolveLinksHelper
{
private static readonly Regex regex = new Regex("((http://|https://|www\\.)([A-Z0-9.\\-]{1,})\\.[0-9A-Z?;~&\\(\\)#,=\\-_\\./\\+]{2,})", RegexOptions.IgnoreCase | RegexOptions.Compiled);
private const string link = "<a href=\"{0}{1}\" rel=\"nofollow\">{2}</a>";
private const int MAX_LENGTH = 50;
private static string ShortenUrl(string url, int max)
{
if (url.Length <= max)
{
return url;
}
int num = url.IndexOf("://");
if (num > -1)
{
url = url.Substring(num + 3);
}
if (url.Length <= max)
{
return url;
}
int num2 = url.IndexOf("/") + 1;
int num3 = url.LastIndexOf("/");
if (num2 < num3)
{
url = url.Remove(num2, num3 - num2);
url = url.Insert(num2, "...");
}
if (url.Length <= max)
{
return url;
}
int num4 = url.IndexOf("?");
if (num4 > -1)
{
url = url.Substring(0, num4);
}
if (url.Length <= max)
{
return url;
}
int num5 = url.IndexOf("#");
if (num5 > -1)
{
url = url.Substring(0, num5);
}
if (url.Length <= max)
{
return url;
}
num2 = url.LastIndexOf("/") + 1;
num3 = url.LastIndexOf(".");
if (num3 - num2 > 10)
{
string text = url.Substring(num2, num3 - num2);
int num6 = url.Length - max + 3;
if (text.Length > num6)
{
url = url.Replace(text, "..." + text.Substring(num6));
}
}
return url;
}
public static string FormatText(string text)
{
if (string.IsNullOrEmpty(text))
{
return string.Empty;
}
CultureInfo invariantCulture = CultureInfo.InvariantCulture;
foreach (Match item in regex.Matches(text))
{
text = (item.Value.Contains("://") ? text.Replace(item.Value, string.Format(invariantCulture, "<a href=\"{0}{1}\" rel=\"nofollow\">{2}</a>", string.Empty, item.Value, ShortenUrl(item.Value, 50))) : text.Replace(item.Value, string.Format(invariantCulture, "<a href=\"{0}{1}\" rel=\"nofollow\">{2}</a>", "http://", item.Value, ShortenUrl(item.Value, 50))));
}
return text;
}
}