我有一个QString,里面有一些HTML ...有没有一种简单的方法来从它剥离HTML?我基本上只想要实际的文字内容。有没有一种简单的方法从Qt中的QString去除HTML?
<i>Test:</i><img src="blah.png" /><br> A test case
将成为:
Test: A test case
我很想知道,如果Qt拥有了这样的字符串函数或效用。
我有一个QString,里面有一些HTML ...有没有一种简单的方法来从它剥离HTML?我基本上只想要实际的文字内容。有没有一种简单的方法从Qt中的QString去除HTML?
<i>Test:</i><img src="blah.png" /><br> A test case
将成为:
Test: A test case
我很想知道,如果Qt拥有了这样的字符串函数或效用。
您可以尝试使用QXmlStreamReader类遍历字符串并提取所有文本(如果您的HTML字符串保证为格式正确的XML)。
事情是这样的:
QXmlStreamReader xml(htmlString);
QString textString;
while (!xml.atEnd()) {
if (xml.readNext() == QXmlStreamReader::Characters) {
textString += xml.text();
}
}
,但我不能确定它的100%QXmlStreamReader API的有效ussage,因为我已经很寿命长的时间前使用它,可能会忘记一些东西。
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
这个答案不足以支持HTML实体的字符串,例如< – 2015-08-12 19:56:20
这个问题,我的头顶,是'
'被删除,而不是转换为换行符。 –
Marcus
2017-03-24 19:40:29
@Marcus正是这个问题所要求的。没有一个HTML被转换成任何东西,这是一个完全不同的请求 – 2017-10-01 04:42:45
如果你不关心性能这么多,然后QTextDocument
确实将HTML转换为纯文本的一个不错的工作。
QTextDocument doc;
doc.setHtml(htmlString);
return doc.toPlainText();
我知道这个问题是旧的,但我正在寻找一个快速和肮脏的方式来处理不正确的HTML。 XML解析器没有给出好的结果。
我认为这是最好的答案。它保持基本的格式,如休息。 – 2015-11-12 12:34:27
也许稍微好一点的解决方案是使用'QTextDocumentFragment': 'QString plainText = QTextDocumentFragment :: fromHtml(htmlString).toPlainText();' – Marcus 2017-03-24 19:43:53
你应该让这是一个真正的答案,而不是评论。我想最好的解决方案。 – 2018-01-25 14:29:28
某些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.
我不想逃避标签,我想删除它们。 – 2015-09-22 20:22:11
'QString :: toHtmlEscaped'不会去除html标签。只需将“<', '>”等字符转换为html代码即可。 – Marcus 2017-03-24 19:36:38
谢谢。我没有试图验证它或提取它。我只是想摆脱它。 – 2010-05-09 23:00:00
哦,我得到的文本*是来自可信来源(不是用户输入),所以我应该没问题。 – 2010-05-09 23:01:35
你是不是指'textString'而不是'textStream'? – 2012-08-25 14:31:20