Как я могу преобразовать символ сущности (Escape-символ) в HTML в QT? - PullRequest
3 голосов
/ 08 октября 2011

Я хочу преобразовать символ сущности (Escape-символ) в HTML в QT, пожалуйста, помогите мне ....

т.е.: я хочу заменить " на ", > на >

===== Это мой код, который не работал ====

   QString MyApp::ReplaceString(const QString Data, const QString &Before, const      QString &After)
{

    QString Result = Data;
    Result.replace(Before, After, Qt::CaseInsensitive);
    return Result;
}

========

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QByteArray data=pReply->readAll();
QString str = codec->toUnicode((const char *)data);

str = Qt::escape(str);
str = ReplaceString(str, """, "\"");   

str = ReplaceString(str,">", ">");

Ответы [ 4 ]

13 голосов
/ 08 октября 2011

Я не уверен, что понимаю, что вы хотите, просто догадываясь. Вы можете использовать QTextDocument. Попробуйте что-то вроде этого:

QTextDocument text;
text.setHtml("<>"");
QString plain = text.toPlainText();
qDebug("%s.", qPrintable(plain));

Помните, что QTextDocument нуждается в графическом модуле.

2 голосов
/ 07 мая 2012

Я думаю, что это решит вашу проблему.

QString escaped= 
QString(myhtml).replace("&","&amp;").replace(">","&gt;").replace("<","&lt;");
1 голос
/ 01 августа 2013

Здравствуйте, чтобы преобразовать не ASCII символ в & # 1001 * XXX ;(где XXX - это число):

/***************************************************************************//*!
* @brief Encode all non ASCII characters into &#...;
* @param[in] src        Text to analyze
* @param[in,opt] force  Force the characters "list" to be converted.
* @return ASCII text compatible. 
*
* @note Original code: http://www.qtforum.org/article/3891/text-encoding.html
*
* @warning Do not forget to use QString::fromUtf8()
*/
QString encodeEntities( const QString& src, const QString& force=QString() )
{
    QString tmp(src);
    uint len = tmp.length();
    uint i = 0;
    while( i<len )
    {
        if( tmp[i].unicode() > 128 || force.contains(tmp[i]) ){
            QString rp = "&#"+QString::number(tmp[i].unicode())+";";
            tmp.replace(i,1,rp);
            len += rp.length()-1;
            i += rp.length();
        }else{
            ++i;
        }
    }
    return tmp;
}


/***************************************************************************//*!
* @brief Allows decode &#...; into UNICODE (utf8) character.
* @param[in] src    Text to analyze
* @return UNICODE (utf8) text.
*
* @note Do not forget to include QRegExp
*/
QString decodeEntities( const QString& src )
{
    QString ret(src);
    QRegExp re("&#([0-9]+);");
    re.setMinimal(true);

    int pos = 0;
    while( (pos = re.indexIn(src, pos)) != -1 )
    {
        ret = ret.replace(re.cap(0), QChar(re.cap(1).toInt(0,10)));
        pos += re.matchedLength();
    }
    return ret;
}

Основное использование:

qDebug() << encodeEntities(QString::fromUtf8("éà@<>hello the world €"),QString("<>"));
// Will print: &#233;&#224;@&#60;&#62;hello the world &#8364;
qDebug() << decodeEntities("a&#223;&#233;plop&#233;&#224;&#231;&#234;&#8364;");
// Will print: hello world
1 голос
/ 04 марта 2013

Тест escape() Функция:

 QString plain = "#include <QtCore>"
 QString html = Qt::escape(plain);
 // html == "#include &lt;QtCore&gt;"

и convertFromPlainText() функция:

QString Qt::convertFromPlainText ( const QString & plain, WhiteSpaceMode mode = WhiteSpacePre )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...