我有一个带有一些 HTML 的 QString ......有没有一种简单的方法可以从中删除 HTML?我基本上只想要实际的文本内容。
<i>Test:</i><img src="blah.png" /><br> A test case
会成为:
Test: A test case
我很想知道 Qt 是否有一个字符串函数或实用程序。
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
如果您不太关心性能,那么QTextDocument
将 HTML 转换为纯文本会做得很好。
QTextDocument doc;
doc.setHtml( htmlString );
return doc.toPlainText();
我知道这个问题很老,但我一直在寻找一种快速而肮脏的方法来处理不正确的 HTML。XML 解析器没有给出好的结果。
您可以尝试使用 QXmlStreamReader 类遍历字符串并提取所有文本(如果您的 HTML 字符串保证为格式良好的 XML)。
像这样的东西:
QXmlStreamReader xml(htmlString);
QString textString;
while (!xml.atEnd()) {
if ( xml.readNext() == QXmlStreamReader::Characters ) {
textString += xml.text();
}
}
但我不确定它对 QXmlStreamReader API 的 100% 有效使用,因为我很久以前就使用过它并且可能会忘记一些东西。
某些 html 不能完全验证 xml 的情况使正确处理它变得更糟。
如果它是有效的 xml(或格式不太差),我认为 QXmlStreamReader + QXmlStreamEntityResolver 可能不是坏主意。
示例代码在:https ://github.com/ycheng/misccode/blob/master/qt_html_parse/utils.cpp
(这可以是评论,但我仍然无权这样做)
这个答案适用于后来阅读这篇文章并使用 Qt5 或更高版本的人。只需使用以下内置函数转义 html 字符。
QString str="<h1>some hedding </h1>"; // a string containing html tags.
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring.