2011-10-08 826 views
3

我想實體字符(轉義字符)轉換爲HTML在QT,請幫我....如何在QT中將實體字符(轉義字符)轉換爲HTML?

即:我想>

更換""> =====這是我的代碼,沒有工作====

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,">", ">"); 
+1

你的問題是不明確的。請添加一些您想要轉換爲什麼的示例。 – Mat

+0

@Mat:感謝您的回覆,我已經添加了一些代碼 –

+0

這些替換工作。你確定你應該逃避你的輸入嗎? – Mat

回答

12

我不確定我明白你想要什麼,只是猜測。你可以使用QTextDocument。試試這樣:

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

請記住,QTextDocument需要gui模塊。

+0

反過來也適用於創建明文字符串的HTML編碼版本。太好了! – Ivo

+0

我認爲值得一提的是它引入了QtGui的依賴關係,所以如果你有一個控制檯的應用程序沒有用。 – rightaway717

2

我認爲這會解決您的問題。

QString escaped= 
QString(myhtml).replace("&","&amp;").replace(">","&gt;").replace("<","&lt;"); 
+2

OP要求反向轉換 – rightaway717

1

測試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) 
+0

這是另一個方向:從unicode字符到實體 –

1

您好非ASCII字符轉換爲&#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 
相關問題