有没有一种简单的方法可以从 Qt 中的 QString 中剥离 HTML?

发布于 2024-08-31 12:05:29 字数 261 浏览 6 评论 0原文

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

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

会变成:

Test: A test case

我很好奇 Qt 是否有一个字符串函数或实用程序。

I have a QString with some HTML in it... is there an easy way to strip the HTML from it? I basically want just the actual text content.

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

Would become:

Test: A test case

I'm curious to know if Qt has a string function or utility for this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

苹果你个爱泡泡 2024-09-07 12:05:30
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
QString s = "<i>Test:</i><img src=\"blah.png\" /><br> A test case";
s.remove(QRegExp("<[^>]*>"));
// s == "Test: A test case"
念﹏祤嫣 2024-09-07 12:05:30

如果您不太关心性能,那么 QTextDocument 在将 HTML 转换为纯文本方面做得非常好。

QTextDocument doc;
doc.setHtml( htmlString );

return doc.toPlainText();

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

If you don't care about performance that much then QTextDocument does a pretty good job of converting HTML to plain text.

QTextDocument doc;
doc.setHtml( htmlString );

return doc.toPlainText();

I know this question is old, but I was looking for a quick and dirty way to handle incorrect HTML. The XML parser wasn't giving good results.

三寸金莲 2024-09-07 12:05:30

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

像这样的事情:

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

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

You may try to iterate through the string using QXmlStreamReader class and extract all text (if you HTML string is guarantied to be well formed XML).

Something like this:

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

but I'm unsure that its 100% valid ussage of QXmlStreamReader API since I've used it quite longe time ago and may forget something.

云醉月微眠 2024-09-07 12:05:30

有些 html 不能完全验证 xml 的情况会使正确计算结果变得更糟。

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

示例代码位于: https://github.com/y Cheng/misccode/blob /master/qt_html_parse/utils.cpp

(这可以是评论,但我仍然没有这样做的权限)

the situation that some html is not quite validate xml make it worse to work it out correctly.

If it's valid xml (or not too bad formated), I think QXmlStreamReader + QXmlStreamEntityResolver might not be bad idea.

Sample code in: https://github.com/ycheng/misccode/blob/master/qt_html_parse/utils.cpp

(this can be a comment, but I still don't have permission to do so)

山有枢 2024-09-07 12:05:30

这个答案是为那些稍后阅读这篇文章并使用 Qt5 或更高版本的人提供的。只需使用内置函数转义 html 字符,如下所示。

QString str="<h1>some hedding </h1>"; // a string containing html tags.
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring.

this answer is for who read this post later and using Qt5 or later. simply escape the html characters using inbuilt functions as below.

QString str="<h1>some hedding </h1>"; // a string containing html tags.
QString esc=str.toHtmlEscaped(); //esc contains the html escaped srring.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文