[Qt-interest] QUrl issue while encoding an already encoded string [BUG?]

Mandeep Sandhu mandeepsandhu.chd at gmail.com
Thu May 13 09:20:26 CEST 2010


Can anybody confirm if this is a bug or  not?

Thanks,
-mandeep

On Thu, May 13, 2010 at 10:46 AM, Mandeep Sandhu
<mandeepsandhu.chd at gmail.com> wrote:
> Hi All,
>
> I've been bitten by some strange behavior while using QUrl!
>
> I'm not sure if it's a bug with QUrl or it's a case of misuse...
>
> Anyways, I have a simple prog that illustrates the problem:
>
> #include <QtCore/QCoreApplication>
> #include <QUrl>
> #include <QDebug>
>
> int main(int argc, char *argv[])
> {
>    QCoreApplication a(argc, argv);
>
>    QString base = QString("http://localhost");
>
>    QUrl myurl = QUrl(base);
>    QUrl myurl2 = QUrl(base, QUrl::TolerantMode); // Same result with
> using StrictMode as well
>
>    QString param("param");
>    QString value("50-2010/05/11 22:45:19 +0000"); // This value needs
> to have the "/" replaced by %2F
>
>    QString encVal = QString(QUrl::toPercentEncoding(value)); //
> convert "/" to "%2F"
>    qDebug() << "Enc Val:" << encVal;
>
>    myurl.addQueryItem(param, value);
>    myurl2.addQueryItem(param, encVal);
>
>    qDebug() << "Plain" << myurl.toEncoded(); // This does not encode
> the "/" in value
>    qDebug() << "Enc"   << myurl2.toEncoded(); // This encodes the %
> in %2F to %25 :(
>
>    return a.exec();
> }
>
> Now the problem comes when QUrl encodes the percent encoded "value"
> string. It's replacing the "%" char with "%25".
> However, the QUrl doc says:
>
> <snip>
> Single "%" characters: Any occurrences of a percent character "%" not
> followed by exactly two hexadecimal characters (e.g., "13%
> coverage.html") will be replaced by "%25"
> </snip>
>
> Shouldn't it leave the already encoded %2F (representing "/" char)
> alone, since the % IS followed by 2 hexadecimal char's "2F"?
>
> Note that I have manually encode the param's value since the normal
> encoding done by QUrl leaves out encoding the "/" char in the "value"
> string, which is NOT INCORRECT, but just that the server I'm talking
> to requires this value to be percent encoded.
>
> My requirement was that I want the complete URL to be encoded as it
> should be, except that one of the params is already encoded and should
> not be RE-encoded.
>
> Regards,
> -mandeep
>




More information about the Qt-interest-old mailing list