+// Escapes non-ASCII and others characters in file: URL to be valid URLs
+static wxString EscapeFileNameCharsInURL(const char *in)
+{
+ wxString s;
+
+ for ( const unsigned char *p = (const unsigned char*)in; *p; ++p )
+ {
+ const unsigned char c = *p;
+
+ // notice that all colons *must* be encoded in the paths used by
+ // wxFileSystem even though this makes URLs produced by this method
+ // unusable with IE under Windows as it requires "file:///c:/foo.bar"
+ // and doesn't accept "file:///c%3a/foo.bar" -- but then we never made
+ // any guarantees about general suitability of the strings returned by
+ // this method, they must work with wxFileSystem only and not encoding
+ // the colon breaks handling of
+ // "http://wherever/whatever.zip#zip:filename.ext" URLs so we really
+ // can't do this without heavy changes to the parsing code here, in
+ // particular in GetRightLocation()
+
+ if ( c == '/' || c == '-' || c == '.' || c == '_' || c == '~' ||
+ (c >= '0' && c <= '9') ||
+ (c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z') )
+ {
+ s << c;
+ }
+ else
+ {
+ s << wxString::Format("%%%02x", c);
+ }
+ }
+
+ return s;
+}
+