@@ -170,17 +170,10 @@ _query = [[[OFString stringWithUTF8String: tmp + 1] stringByURLDecoding] copy]; } - if ((tmp = strchr(UTF8String, ';')) != NULL) { - *tmp = '\0'; - - _parameters = [[[OFString stringWithUTF8String: - tmp + 1] stringByURLDecoding] copy]; - } - UTF8String--; *UTF8String = '/'; _path = [[[OFString stringWithUTF8String: UTF8String] stringByURLDecoding] copy]; @@ -234,16 +227,10 @@ *tmp = '\0'; _query = [[[OFString stringWithUTF8String: tmp + 1] stringByURLDecoding] copy]; } - if ((tmp = strchr(UTF8String, ';')) != NULL) { - *tmp = '\0'; - _parameters = [[[OFString stringWithUTF8String: tmp + 1] - stringByURLDecoding] copy]; - } - if (*UTF8String == '/') _path = [[[OFString stringWithUTF8String: UTF8String] stringByURLDecoding] copy]; else { OFString *path, *s; @@ -350,11 +337,10 @@ [_host release]; [_port release]; [_user release]; [_password release]; [_path release]; - [_parameters release]; [_query release]; [_fragment release]; [super dealloc]; } @@ -378,13 +364,10 @@ return false; if (URL->_password != _password && ![URL->_password isEqual: _password]) return false; if (URL->_path != _path && ![URL->_path isEqual: _path]) return false; - if (URL->_parameters != _parameters && - ![URL->_parameters isEqual: _parameters]) - return false; if (URL->_query != _query && ![URL->_query isEqual: _query]) return false; if (URL->_fragment != _fragment && ![URL->_fragment isEqual: _fragment]) return false; @@ -401,11 +384,10 @@ OF_HASH_ADD_HASH(hash, [_host hash]); OF_HASH_ADD_HASH(hash, [_port hash]); OF_HASH_ADD_HASH(hash, [_user hash]); OF_HASH_ADD_HASH(hash, [_password hash]); OF_HASH_ADD_HASH(hash, [_path hash]); - OF_HASH_ADD_HASH(hash, [_parameters hash]); OF_HASH_ADD_HASH(hash, [_query hash]); OF_HASH_ADD_HASH(hash, [_fragment hash]); OF_HASH_FINALIZE(hash); @@ -485,15 +467,10 @@ objc_autoreleasePoolPop(pool); return [ret autorelease]; } -- (OFString *)parameters -{ - return _parameters; -} - - (OFString *)query { return _query; } @@ -516,11 +493,10 @@ [copy setHost: _host]; [copy setPort: _port]; [copy setUser: _user]; [copy setPassword: _password]; [copy setPath: _path]; - [copy setParameters: _parameters]; [copy setQuery: _query]; [copy setFragment: _fragment]; } @catch (id e) { [copy release]; @throw e; @@ -551,21 +527,23 @@ if (_path != nil) { if (![_path hasPrefix: @"/"]) @throw [OFInvalidFormatException exception]; [ret appendString: [_path - stringByURLEncodingWithAllowedCharacters: "$-_.!*()/"]]; + stringByURLEncodingWithAllowedCharacters: + "-._~!$&'()*+,;=:@/"]]; } - if (_parameters != nil) - [ret appendFormat: @";%@", [_parameters stringByURLEncoding]]; - if (_query != nil) - [ret appendFormat: @"?%@", [_query stringByURLEncoding]]; + [ret appendFormat: @"?%@", + [_query stringByURLEncodingWithAllowedCharacters: + "-._~!$&'()*+,;=:@/?"]]; if (_fragment != nil) - [ret appendFormat: @"#%@", [_fragment stringByURLEncoding]]; + [ret appendFormat: @"#%@", + [_fragment stringByURLEncodingWithAllowedCharacters: + "-._~!$&'()*+,;=:@/?"]]; objc_autoreleasePoolPop(pool); [ret makeImmutable];