using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text.RegularExpressions;
using System.Web;
using HtmlAgilityPack;
using Kreta.BusinessLogic.Utils;
namespace Kreta.BusinessLogic.Logic
{
public static class RichTextLogic
{
public static List ", string.Empty) //NOTE: Az összes sortörést egységessé tesszük.
.Replace("
", " ").Replace("", " "));
result = Regex.Replace(result, "<.*?>", string.Empty);
return result;
}
return input;
}
public static string RemoveSpecificHtmlTags(string input, string[] htmlTags)
{
if (string.IsNullOrWhiteSpace(input))
{
return input;
}
var inputHtml = HttpUtility.HtmlDecode(input);
foreach (var htmlTag in htmlTags)
{
inputHtml = Regex.Replace(inputHtml, $"<{htmlTag}" + @"([\w\W]+?)>", string.Empty);
}
return inputHtml;
}
public static string ConvertRawHtmlToRichTextHtml(string html)
{
var actions = new List
") //NOTE: A külső div-be írt enter-et ezt generálják ki, ezt replace-eljük
-re.
.Replace("
") //NOTE: A kendo editor-ba írt enter-et ezt generálják ki, ezt replace-eljük
-re.
.Replace("
", "
") //NOTE: Az összes sortörést egységessé tesszük.
.Replace("
", "
") //NOTE: Az összes sortörést egységessé tesszük.
.Replace("
") //NOTE: Az összes sortörést egységessé tesszük.
.Replace("
") //NOTE: Az összes sortörést egységessé tesszük.
.Replace("", "") //NOTE: Egységes és FastReport kompatibilis tag-ekre replace-elünk.
.Replace("", "") //NOTE: Egységes és FastReport kompatibilis tag-ekre replace-elünk.
.Replace("", "") //NOTE: Egységes és FastReport kompatibilis tag-ekre replace-elünk.
.Replace("", "") //NOTE: Egységes és FastReport kompatibilis tag-ekre replace-elünk.
.Replace("", "") //NOTE: Egységes és FastReport kompatibilis tag-ekre replace-elünk.
.Replace("", ""); //NOTE: Egységes és FastReport kompatibilis tag-ekre replace-elünk.
}
//NOTE: --- Start: Replace-eljük az összes nem legális html tag-et.
Random random = new Random();
//NOTE: Erre a bonyolult random-ozós replace-es logikára azért van szükség, hogy ne tudják hack-elni véletlenül sem a bejövő adatokat!
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string closeTagTempString = $"¤{new string(Enumerable.Repeat(chars, 5).Select(s => s[random.Next(s.Length)]).ToArray())}¤";
string openTagTempString = $"÷{new string(Enumerable.Repeat(chars, 5).Select(s => s[random.Next(s.Length)]).ToArray())}÷";
//NOTE: Replace-eljük a legális html tag-eket, hogy azokat a RemoveAllHtmlTags, ne szedje ki!
foreach (var legalHtmlTag in legalHtmlTagList)
{
result = result.Replace($"{legalHtmlTag}>", $"{closeTagTempString}{legalHtmlTag}{closeTagTempString}")
.Replace($"<{legalHtmlTag}>", $"{openTagTempString}{legalHtmlTag}{openTagTempString}");
//NOTE: Ha stílust tartalmaz a legalHtmlTag akkor azt nem szabad leszedni róla (pl szinezés miatt)
if (enableHtmlTagProperties)
{
result = result.Replace($"<{legalHtmlTag}", $"{openTagTempString}{legalHtmlTag}");
}
}
//NOTE: Replace-eljük az összes html tag-et, ami bennemaradt a szövegben.
result = CommonUtils.RemoveAllHtmlTags(result);
//NOTE: Vissza Replace-eljük a legális html tag-eket, hogy azok normális formában mentődjenek el!
foreach (var legalHtmlTag in legalHtmlTagList)
{
result = result.Replace($"{closeTagTempString}{legalHtmlTag}{closeTagTempString}", $"{legalHtmlTag}>")
.Replace($"{openTagTempString}{legalHtmlTag}{openTagTempString}", $"<{legalHtmlTag}>");
//NOTE: Ha stílust tartalmaz a legalHtmlTag akkor azt nem szabad leszedni róla (pl szinezés miatt)
if (enableHtmlTagProperties)
{
result = result.Replace($"{openTagTempString}{legalHtmlTag}", $"<{legalHtmlTag}");
}
}
//NOTE: --- End: Replace-eljük az összes nem legális html tag-et.
//NOTE: Remove-oljuk a rossz lezáró tag-eket, amikhez nem tartozik nyitó tag!
HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(result);
List
", " ") //NOTE: Az összes sortörést szóközre cseréljük.
.Replace("
", " ") //NOTE: Az összes sortörést szóközre cseréljük.
.Replace("
", " ") //NOTE: Az összes sortörést szóközre cseréljük.
.Replace("", " ") //NOTE: Az összes sortörést szóközre cseréljük.
.Replace("
", string.Empty) //NOTE: Az összes sortörést szóközre cseréljük. .Replace("", " ") //NOTE: A felsorolás elemeit is elválasztjuk. .Replace("", string.Empty) //NOTE: A formázás tageket töröljük. .Replace("", string.Empty) //NOTE: A formázás tageket töröljük. .Replace("", string.Empty) //NOTE: A formázás tageket töröljük. .Replace("", string.Empty) //NOTE: A formázás tageket töröljük. .Replace("", string.Empty) //NOTE: A formázás tageket töröljük. .Replace("", string.Empty); //NOTE: A formázás tageket töröljük. result = CommonUtils.RemoveAllHtmlTags(result); return HttpUtility.HtmlDecode(result); } } }