আমি এখানে প্রস্তাবিত রেজেক্স ভিত্তিক সমাধানগুলি দেখেছি এবং তারা সবচেয়ে তুচ্ছ ঘটনা বাদ দিয়ে আমাকে কোনও আত্মবিশ্বাসের সাথে পূরণ করে না। কোনও অ্যাট্রিবিউটের একটি কোণ বন্ধনী এটি ভেঙে ফেলতে হবে, বন্য থেকে ম্যাল-ফর্মযুক্ত এইচটিএমএলকে ছেড়ে দিন। এবং সত্তা কি পছন্দ& ? আপনি যদি এইচটিএমএলকে সরল পাঠ্যে রূপান্তর করতে চান তবে আপনাকে সত্তাও ডিকোড করতে হবে।
সুতরাং আমি নীচের পদ্ধতিটি প্রস্তাব করি।
ব্যবহার HtmlAgilityPack , এই এক্সটেনশানটি পদ্ধতি দক্ষতার একটি HTML টুকরা থেকে সব এইচটিএমএল ট্যাগ রেখাচিত্রমালা। এইচটিএমএল সত্তাদের মতো করেও ডিকোড করে &। প্রতিটি পাঠ্য আইটেমের মধ্যে একটি নতুন লাইন সহ কেবল অভ্যন্তরীণ পাঠ্য আইটেমগুলি দেয়।
public static string RemoveHtmlTags(this string html)
{
if (String.IsNullOrEmpty(html))
return html;
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
if (doc.DocumentNode == null || doc.DocumentNode.ChildNodes == null)
{
return WebUtility.HtmlDecode(html);
}
var sb = new StringBuilder();
var i = 0;
foreach (var node in doc.DocumentNode.ChildNodes)
{
var text = node.InnerText.SafeTrim();
if (!String.IsNullOrEmpty(text))
{
sb.Append(text);
if (i < doc.DocumentNode.ChildNodes.Count - 1)
{
sb.Append(Environment.NewLine);
}
}
i++;
}
var result = sb.ToString();
return WebUtility.HtmlDecode(result);
}
public static string SafeTrim(this string str)
{
if (str == null)
return null;
return str.Trim();
}
তুমি আসলেই সিরিয়াস হন, তাহলে আপনি খুব নির্দিষ্ট এইচটিএমএল ট্যাগ বিষয়বস্তু উপেক্ষা করার (চাই চাই <script>, <style>, <svg>, <head>,<object> মনে আসে!) কারণ তারা সম্ভবত ইন্দ্রিয় আমরা পরে হয় পাঠযোগ্য বিষয়বস্তু থাকে না। আপনি সেখানে যা করেন তা আপনার পরিস্থিতি এবং আপনি কতদূর যেতে চান তার উপর নির্ভর করবে, তবে এইচটিএমএলএগ্রিলিপ্যাকটি ব্যবহার করা শ্বেতলিস্ট বা নির্বাচিত ট্যাগগুলিকে কালো তালিকাভুক্ত করা বেশ নগণ্য হবে।
আপনি একটি HTML পৃষ্ঠার বিষয়বস্তু ফিরে রেন্ডারিং হয়, আপনি XSS দুর্বলতা ও বুঝতে নিশ্চিত কিভাবে এটা রোধ করার জন্য - অর্থাৎ সবসময় কোনো ব্যবহারকারী-প্রবেশ পাঠ্য একটি HTML পৃষ্ঠা (সম্মুখের ফিরে অনুষ্ঠিত পরার এনকোড >হয়ে >ইত্যাদি)।