使用 C++ 将 HTML 转换为纯文本

Posted

技术标签:

【中文标题】使用 C++ 将 HTML 转换为纯文本【英文标题】:Convert HTML to Plain Text using c++ 【发布时间】:2011-01-25 11:33:03 【问题描述】:

我正在做需要将 html 文件转换为纯文本的邮件解析应用程序。 关于这一点,我发现了一些可以转换的脚本。 我想在 C++ 中做同样的事情。

所以请向我推荐任何用于将 HTML 转换为纯文本的跨平台和开源 C++ 库。

提前致谢 问候 子比

【问题讨论】:

“转换”是什么意思? Html 是纯文本!你想去掉html标签吗? 是的。我想去掉 HTML 标签 【参考方案1】:

我发布了 Windows which originally came from @Ben Anderson's C# solution 的 c++ 版本。 请注意,代码还不是很健壮。此外,所有开头和结尾的换行符都将被修剪。

// The trimming method comes from https://***.com/a/1798170/1613961
wstring trim(const std::wstring& str, std::wstring& newline = L"\r\n")

    const auto strBegin = str.find_first_not_of(newline);
    if (strBegin == std::string::npos)
        return L""; // no content

    const auto strEnd = str.find_last_not_of(newline);
    const auto strRange = strEnd - strBegin + 1;

    return str.substr(strBegin, strRange);


wstring HtmlToText(wstring htmlTxt) 

    std::wregex stripFormatting(L"<[^>]*(>|$)"); //match any character between '<' and '>', even when end tag is missing

    wstring s1 = std::regex_replace(htmlTxt, stripFormatting, L"");
    wstring s2 = trim(s1);
    wstring s3 = std::regex_replace(s2, std::wregex(L"\\&nbsp;"), L" ");
    return s3;

【讨论】:

很有趣,但它还应该包括 html 实体转换(你知道,&amp;lt; 之类的东西)【参考方案2】:

在尝试了几个选项后,我认为更简单的大规模实现方法是使用 elinks。

在 ubuntu 中:

sudo apt-get install elinks
elinks -dump a.html > a.txt

【讨论】:

【参考方案3】:

听起来很“明显”,您可以将所有文本保留在 &gt;&lt; 之间

【讨论】:

我认为您误解了我的问题。我的愿望是将 HTML 转换为文本。 @subbi :HTML 标签包含在 之间,因此剥离它们会给你文本:> & )和特殊的结构,如 &<...>; (即  , <)【参考方案4】:

看看html2text。它是一个命令工具,而不是纯库,但包含剥离和转换 html 的代码。所以你应该可以使用它。

【讨论】:

【参考方案5】:

尝试使用正则表达式提取html标签并将结果保存为文件文本。但这并不简单。使用这个帮助类DEELX - Regular Expression Engine。

【讨论】:

感谢您提供指向 DEELX 的链接。我不总是喜欢处理包括提升在内的问题。

以上是关于使用 C++ 将 HTML 转换为纯文本的主要内容,如果未能解决你的问题,请参考以下文章

纯文本文档如何转换成excel工作表

如何将HTML转换为纯文本格式Text

使用 MIME::Entity 将 HTML 电子邮件转换为纯文本

使用 mailkit 发送的多部分电子邮件的文本/纯文本版本未正确接收

将 HTML 项目符号转换为纯文本

PHP将网页内容转换为纯文本文件并保存为TXT