2

ユーザーは、Qt 環境の QLineEdit にテキストを入力できます。ただし、これらの入力テキストには HTML 特殊文字を含めることができます。私の目的は、出現するすべての HTML 特殊文字を代替文字に置き換えることによって、このテキストを変換することです。

同様のケースが PHP で htmlspecialchars() 関数http://php.net/manual/en/function.htmlspecialchars.phpで見つかります。

私がこれをしたい主な理由は、ユーザー入力をリッチテキスト QTextEdit に表示したいので、ユーザーが HTML を変更できるようにしたくないためであり、HTML 特殊文字をあまり手間をかけずに使用できるようにしたいからです。 .

これはどのように達成できますか?

4

2 に答える 2

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;!

htmlspecialcharsこれはPHPの に直接相当します。Qt::escapeこれは、同じことを行う関数 ( Amartel が言及) を置き換えますが、 現在は廃止されています。

関数( Qt::convertFromPlainTextAmartel も言及) は Qt 5 にも存在しますが、PHP のhtmlspecialchars. 、、 、、 を置き換える<だけでなく、空白文字 (スペース、タブ、改行など) を追加処理して、生成された HTML を元のプレーン テキストと視覚的に似たものにします。特に、改行の場合は/ 、スペースの場合は改行なしのスペース、タブの場合は複数の改行なしのスペースを入れることができます。つまり、この機能は単なるではなく、組み合わせよりもさらに包括的です。&lt;>&gt;&&amp;"&quot;<p>…&lt;/p><br>htmlspecialcharsnl2br(htmlspecialchars($s))

PHP のhtmlspecialcharswithとは異なり、ENT_QUOTESこの回答にリストされている Qt 関数はいずれも一重引用符 ( ') を&apos;/に置き換えないことに注意&#039;してください。したがって、たとえば、QString html = "<img alt='" + s.toHtmlEscaped() + "'>";安全ではなく、安全になるだけQString html = "<img alt=\"" + s.toHtmlEscaped() + "\">";です。(ただし、<は置き換えられ、'の外では特別な意味がないので、 の<…&gt;ようなものでQString html = "<b>" + s.toHtmlEscaped() + "</b>";も安全です。)

于 2022-02-11T19:07:31.413 に答える