KIO::UDSEntry and URL encoding
Martin Koller
kollix at aon.at
Wed Aug 15 20:01:57 BST 2012
On Monday, 13. August 2012 16:03:48 Thiago Macieira wrote:
> On segunda-feira, 13 de agosto de 2012 14.28.02, Martin Koller wrote:
> > Hi,
> > (using 4.9.0)
> >
> > when using konqueror and typing "man:" it starts to list possible entries
> > which the kio_man slave generates. However, konqueror displays percent
> > encoded URLs, e.g. "man:%281%29/" instead of "man:(1)/" kio_man creates the
> > KIO::UDSEntry as follows:
> >
> > QString name = "man:/(" + *it + ')';
> > uds_entry.insert( KIO::UDSEntry::UDS_NAME, sectionName( *it ) );
> > uds_entry.insert( KIO::UDSEntry::UDS_URL, name );
> >
> > (sectionName(...) delivers a human readable text)
> >
> > What I do not find in the KIO::UDSEntry documentation is if the URL should
> > use percent encoded strings or not. However doing a simple test where I
> > explicitely use QString name = "man:/%28" + *it + "%29"; does not work
> > either.
>
> That's not a decision of UDSEntry. That's a decision of who's displaying the
> URL.
>
> The two URLs are equivalent, so there's nothing wrong with the encoding. It's
> just a matter of whether konqueror decides to decode the parentheses.
>
> > Is this a general problem in konqueror (or the combobox it uses or I don't
> > know where in kdelibs) or do I have to change something in kio_man ?
>
> It's not a problem. The behaviour you're describing is "general" though.
Well, it's a problem for the user.
I found out that the culprit is KUrlCompletion, which - for whatever reason -
uses QUrl::toPercentEncoding() when an URL is to be shown.
I also found out that Qt seems to have a "bug" (in quotes because as you said percent encoding
is equivalent to unecoded chars): QUrl::toPercentEncoding() defines unreserved chars as:
Unreserved is defined as: ALPHA / DIGIT / "-" / "." / "_" / "~"
but rfc2396 defines this set as:
unreserved = alphanum | mark
mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
I'd like to fix the problem in KUrlCompletion and tried to simply add an additional
exclude array of "()!*'", which at least makes man:(1)/ etc. URLs human readable.
However, I see that there is still some inconsistency in what konqueror shows in its
completion list. E.g. when typing "man:mklos" it shows "man:mklost%2Bfound" in the completion list,
but when I select this entry, the URL in the address line edit is changed and displays as
"man:mklost+found"
Even worse: when I now again type "man:mklos", I get 2 entries in the completion list
"man:mklost%2Bfound" and "man:mklost+found" (the one coming from the completion, the other from the history)
No matter which one I chose, the result in the address line edit is always the unencoded one, which
- for a user - makes much more sense.
So my main question is: would it hurt anyone to simply completely get rid of QUrl::toPercentEncoding()
in the KUrlCompletion implementation ?
Why would I ever want to get a percent encoded string from a completer, which is about helping a human ?
--
Best regards/Schöne Grüße
Martin
A: Because it breaks the logical sequence of discussion
Q: Why is top posting bad?
() ascii ribbon campaign - against html e-mail
/\ www.asciiribbon.org - against proprietary attachments
Geschenkideen, Accessoires, Seifen, Kulinarisches: www.bibibest.at
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20120815/8edcc6fe/attachment.sig>
More information about the kde-core-devel
mailing list