86 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|