diff --git a/core/lib/utils/html/html_utils.dart b/core/lib/utils/html/html_utils.dart index 65e166903..8c83d4503 100644 --- a/core/lib/utils/html/html_utils.dart +++ b/core/lib/utils/html/html_utils.dart @@ -685,14 +685,31 @@ class HtmlUtils { }); '''; - static String extractPlainText(String html) { + static String extractPlainText( + String html, { + bool removeQuotes = true, + bool removeStyle = true, + bool removeScript = true, + }) { var cleaned = html; - // Delete the blockquote and the content inside - final blockquoteRegex = RegExp( - r'
', - caseSensitive: false, - ); - cleaned = html.replaceAll(blockquoteRegex, ''); + + if (cleaned.isEmpty) return ''; + + // Parse DOM + final doc = parser.parse(cleaned); + + // Remove unwanted nodes by CSS selector + if (removeQuotes) { + doc.querySelectorAll('blockquote').forEach((e) => e.remove()); + } + if (removeStyle) { + doc.querySelectorAll('style').forEach((e) => e.remove()); + } + if (removeScript) { + doc.querySelectorAll('script').forEach((e) => e.remove()); + } + + cleaned = doc.outerHtml; // Decode HTML entities up to 5 times (& → &, → space, <div> →, ...) int iterations = 0;