Qt, QUrl, QUrlQuery: การเข้ารหัสอักขระพิเศษในสตริงการสืบค้น

ฉันสร้างแบบสอบถาม URL เช่นนี้:

QString normalize(QString text)    
{    
    text.replace("%", "%25");    
    text.replace("@", "%40");    
    text.replace("‘", "%27");    
    text.replace("&", "%26");    
    text.replace("“", "%22");    
    text.replace("’", "%27");    
    text.replace(",", "%2C");    
    text.replace(" ", "%20");    

    return text;    
}    
QString key = "usermail";
QString value = "[email protected]";    
QUrlQuery qurlqr;    
qurlqr.addQueryItem(normalize(key), normalize(value));

QString result = qurlqr.toString();

ผลลัพธ์ที่คาดหวังคือ:

usermail=aemail%40gmail.com. 

แต่ฉันได้รับ:

[email protected]

ฉันไม่รู้ว่าทำไม คุณสามารถช่วยฉันได้ไหม?

(ฉันใช้ Qt5 บน Win7)


person aviit    schedule 10.05.2013    source แหล่งที่มา


คำตอบ (1)


toString ของ QUrlQuery โดยค่าเริ่มต้นจะถอดรหัสการเข้ารหัสเปอร์เซ็นต์ หากคุณต้องการเวอร์ชันที่เข้ารหัสลอง:

qurlqr.toString(QUrl::FullyEncoded)

นอกจากนี้ คุณไม่จำเป็นต้องเข้ารหัสสตริงด้วยตนเองโดยการแทนที่อักขระ คุณสามารถใช้ QUrl::toEncoded() แทนได้ (ฉันขอแนะนำให้คุณอ่าน QUrlQuery เอกสาร)

person Sam    schedule 19.05.2013
comment
อย่างไรก็ตาม โปรดระวัง toEncoded จะไม่ทำงานกับเครื่องหมาย '+' - person Étienne; 19.04.2016