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 = "{2}"; 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, "{2}", string.Empty, item.Value, ShortenUrl(item.Value, 50))) : text.Replace(item.Value, string.Format(invariantCulture, "{2}", "http://", item.Value, ShortenUrl(item.Value, 50)))); } return text; } }