2

用户将能够在 Qt 环境中将一些文本放入 QLineEdit。但是,这些输入文本可以包含 HTML 特殊字符。我的目标是通过用替代品替换所有出现的 HTML 特殊字符来转换此文本。

在 PHP 中使用 htmlspecialchars() 函数http://php.net/manual/en/function.htmlspecialchars.php可以找到类似的情况。

我想这样做的主要原因是因为我想在富文本 QTextEdit 中显示用户输入,并且我不希望用户能够更改 HTML,并且我希望能够使用 HTML 特殊字符而没有太多麻烦.

如何做到这一点?

4

2 回答 2

1

我知道的最简单的方法是使用QTextEdit::toHtml

QString convert();
{
    QString s = lineEdit->text();
    QTextEdit textEdit;
    textEdit.setPlainText(s);
    QString ret = textEdit.toHtml();
    int firstClosingTag = ret.indexOf("</p></body></html>");
    int lastOpeningTag = ret.lastIndexOf(">", firstClosingTag);
    return ret.mid(lastOpeningTag + 1, firstClosingTag - lastOpeningTag - 1);
}

还有两个功能,您会发现它们很有用:

Qt::convertFromPlainText()Qt::escape()

于 2013-06-04T10:56:45.673 回答
0

在 Qt5 中,它是QString::toHtmlEscaped,例如:

QString a = "Hello, <span class=\"name\">Bear</span>!";
// a will contain: Hello, <span class="name">Bear</span>!

QString b = a.toHtmlEscaped();
// b will contain: Hello, &lt;span class=&quot;name&quot;&gt;Bear&lt;/span&gt;!

这直接相当于htmlspecialcharsPHP 中的。它取代了 Qt::escape功能(由 Amartel提到),它做同样的事情,但现在已经过时了。

Qt::convertFromPlainText函数(也被 Amartel 提到)仍然存在于 Qt 5 中,但它比 PHP 的htmlspecialchars. 它不仅替换<了 with &lt;>with &gt;&with &amp;"with ,&quot;而且还对空白字符(空格、制表符、换行符等)进行了额外处理,以使生成的 HTML 在视觉上看起来与原始纯文本相似。特别是,它可以将<p>…&lt;/p>/<br>用于换行,将不间断空格用于空格,将多个不间断空格用于制表符。即这个功能不仅仅是htmlspecialchars,它比nl2br(htmlspecialchars($s))组合更全面。

请注意,与 PHP 的htmlspecialcharswith不同ENT_QUOTES,此答案中列出的 Qt 函数都没有将单引号 ( ')替换为&apos;/ &#039;。因此,例如,QString html = "<img alt='" + s.toHtmlEscaped() + "'>";不会安全,只会安全QString html = "<img alt=\"" + s.toHtmlEscaped() + "\">";。(但是, as<被替换并且'在外面没有特殊含义<…&gt;,类似的东西QString html = "<b>" + s.toHtmlEscaped() + "</b>";也是安全的。)

于 2022-02-11T19:07:31.413 回答