! wxURL has undergone some radical changes.
* Many accessors of wxURL - GetHostName, GetProtocolName, and GetPath,
- have been replaced by its parent's (wxURI) counterparts.
+ have been replaced by its parent's (wxURI) counterparts - GetServer,
+ GetScheme, and GetPath, respectively.
- * ConvertToValidURI has been replaced by wxURI, and even applications
- with 2.4 compatability enabled will have the second parameter, delims,
- completely ignored.
+ * ConvertToValidURI has been replaced by wxURI. Do not use
+ ConvertToValidURI for future applications.
* ConvertFromURI has been replaced by wxURI::Unescape.
- added wxTextInputStream::operator>>(wchar_t) for compilers which support this
- added wxURI, a class for dealing with Uniform Resource Identifiers
- changed wxURL to inherit from wxURI and provide assignment and comparison
-- Added UTF7 character conversion for platforms that don't support it
+- implemented wxConvUTF7 (modified patch from Fredrik Roubert)
+- added versions of MB2WC and WC2MB for wxMBConv that for embedded null chars
All (GUI):
wxString GetHostName() const { return m_server; }
wxString GetPath() const { return m_path; }
- //Use wxURI instead - delims is ignored
+ //Use wxURI instead - this does not work that well
static wxString ConvertToValidURI(
const wxString& uri,
const wxChar* delims = wxT(";/?:@&=+$,")
#include "wx/url.h"
-wxString wxURL::ConvertToValidURI(const wxString& uri, const wxChar* WXUNUSED(delims))
+//Note that this old code really doesn't convert to a URI that well and looks
+//more like a dirty hack than anything else...
+
+wxString wxURL::ConvertToValidURI(const wxString& uri, const wxChar* delims)
{
- return wxURI(uri).BuildURI();
+ wxString out_str;
+ wxString hexa_code;
+ size_t i;
+
+ for (i = 0; i < uri.Len(); i++)
+ {
+ wxChar c = uri.GetChar(i);
+
+ if (c == wxT(' '))
+ {
+ // GRG, Apr/2000: changed to "%20" instead of '+'
+
+ out_str += wxT("%20");
+ }
+ else
+ {
+ // GRG, Apr/2000: modified according to the URI definition (RFC 2396)
+ //
+ // - Alphanumeric characters are never escaped
+ // - Unreserved marks are never escaped
+ // - Delimiters must be escaped if they appear within a component
+ // but not if they are used to separate components. Here we have
+ // no clear way to distinguish between these two cases, so they
+ // are escaped unless they are passed in the 'delims' parameter
+ // (allowed delimiters).
+
+ static const wxChar marks[] = wxT("-_.!~*()'");
+
+ if ( !wxIsalnum(c) && !wxStrchr(marks, c) && !wxStrchr(delims, c) )
+ {
+ hexa_code.Printf(wxT("%%%02X"), c);
+ out_str += hexa_code;
+ }
+ else
+ {
+ out_str += c;
+ }
+ }
+ }
+
+ return out_str;
}
wxString wxURL::ConvertFromURI(const wxString& uri)