29

我有一个带有一些 HTML 的 QString ......有没有一种简单的方法可以从中删除 HTML?我基本上只想要实际的文本内容。

<i>Test:</i><img src="blah.png" /><br> A test case

会成为:

Test: A test case

我很想知道 Qt 是否有一个字符串函数或实用程序。

4

5 回答 5

38
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
于 2011-05-14T09:24:39.767 回答
30

如果您不太关心性能,那么QTextDocument将 HTML 转换为纯文本会做得很好。

QTextDocument doc;
doc.setHtml( htmlString );

return doc.toPlainText();

我知道这个问题很老,但我一直在寻找一种快速而肮脏的方法来处理不正确的 HTML。XML 解析器没有给出好的结果。

于 2012-03-03T13:17:55.943 回答
14

您可以尝试使用 QXmlStreamReader 类遍历字符串并提取所有文本(如果您的 HTML 字符串保证为格式良好的 XML)。

像这样的东西:

QXmlStreamReader xml(htmlString);
QString textString;
while (!xml.atEnd()) {
    if ( xml.readNext() == QXmlStreamReader::Characters ) {
        textString += xml.text();
    }
}

但我不确定它对 QXmlStreamReader API 的 100% 有效使用,因为我很久以前就使用过它并且可能会忘记一些东西。

于 2010-05-09T22:44:18.667 回答
1

某些 html 不能完全验证 xml 的情况使正确处理它变得更糟。

如果它是有效的 xml(或格式不太差),我认为 QXmlStreamReader + QXmlStreamEntityResolver 可能不是坏主意。

示例代码在:https ://github.com/ycheng/misccode/blob/master/qt_html_parse/utils.cpp

(这可以是评论,但我仍然无权这样做)

于 2015-09-21T07:23:42.127 回答
-5

这个答案适用于后来阅读这篇文章并使用 Qt5 或更高版本的人。只需使用以下内置函数转义 html 字符。

QString str="<h1>some hedding </h1>"; // a string containing html tags.
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring.
于 2015-09-22T19:26:54.703 回答