Author: rfm Date: Tue Dec 6 10:10:13 2016 New Revision: 40253 URL: http://svn.gna.org/viewcvs/gnustep?rev=40253&view=rev Log: Allow encoding of form data using alternative charset
Modified: libs/webserver/trunk/WebServer.h libs/webserver/trunk/WebServer.m Modified: libs/webserver/trunk/WebServer.h URL: http://svn.gna.org/viewcvs/gnustep/libs/webserver/trunk/WebServer.h?rev=40253&r1=40252&r2=40253&view=diff ============================================================================== --- libs/webserver/trunk/WebServer.h (original) +++ libs/webserver/trunk/WebServer.h Tue Dec 6 10:10:13 2016 @@ -457,6 +457,13 @@ * Same as the instance method of the same name. */ + (NSUInteger) encodeURLEncodedForm: (NSDictionary*)dict + charset: (NSString*)charset + into: (NSMutableData*)data; + +/** DEPRECATED ... use +encodeURLEncodedForm:charset:into: instead.<br /> + * Same as the instance method of the same name. + */ ++ (NSUInteger) encodeURLEncodedForm: (NSDictionary*)dict into: (NSMutableData*)data; @@ -614,9 +621,16 @@ * Each value in the array may be a data object or a string.<br /> * As a special case, a value may be a data object or a string rather * than an array ... this is treated like an array of one value.<br /> - * All non data keys and values are converted to data using - * utf-8 encoding.<br /> + * All non data keys and values are converted to data using the specified + * charset (or utf-8 if charset is nil/unrecognized or where the key/value + * cannot be represented using the specified charset).<br /> * This method returns the number of values actually encoded. + */ +- (NSUInteger) encodeURLEncodedForm: (NSDictionary*)dict + charset: (NSString*)charset + into: (NSMutableData*)data; + +/** DEPRECATED ... use -encodeURLEncodedForm:charset:into: instead.<br /> */ - (NSUInteger) encodeURLEncodedForm: (NSDictionary*)dict into: (NSMutableData*)data; Modified: libs/webserver/trunk/WebServer.m URL: http://svn.gna.org/viewcvs/gnustep/libs/webserver/trunk/WebServer.m?rev=40253&r1=40252&r2=40253&view=diff ============================================================================== --- libs/webserver/trunk/WebServer.m (original) +++ libs/webserver/trunk/WebServer.m Tue Dec 6 10:10:13 2016 @@ -335,13 +335,28 @@ } + (NSUInteger) encodeURLEncodedForm: (NSDictionary*)dict + charset: (NSString*)charset into: (NSMutableData*)data { CREATE_AUTORELEASE_POOL(arp); NSEnumerator *keyEnumerator; + NSStringEncoding enc; id key; NSUInteger valueCount = 0; NSMutableData *md = [NSMutableDataClass dataWithCapacity: 100]; + + if (nil == charset) + { + enc = NSUTF8StringEncoding; + } + else + { + enc = [GSMimeDocument encodingFromCharset: charset]; + if (GSUndefinedEncoding == enc) + { + enc = NSUTF8StringEncoding; + } + } keyEnumerator = [dict keyEnumerator]; while ((key = [keyEnumerator nextObject]) != nil) @@ -358,7 +373,11 @@ else { key = [key description]; - keyData = [key dataUsingEncoding: NSUTF8StringEncoding]; + keyData = [key dataUsingEncoding: enc]; + if (nil == keyData) + { + keyData = [key dataUsingEncoding: NSUTF8StringEncoding]; + } } [md setLength: 0]; escapeData([keyData bytes], [keyData length], md); @@ -388,7 +407,11 @@ else { value = [value description]; - valueData = [value dataUsingEncoding: NSUTF8StringEncoding]; + valueData = [value dataUsingEncoding: enc]; + if (nil == valueData) + { + valueData = [value dataUsingEncoding: NSUTF8StringEncoding]; + } } escapeData([valueData bytes], [valueData length], data); valueCount++; @@ -396,6 +419,14 @@ } RELEASE(arp); return valueCount; +} + ++ (NSUInteger) encodeURLEncodedForm: (NSDictionary*)dict + into: (NSMutableData*)data +{ + return [self encodeURLEncodedForm: dict + charset: nil + into: data]; } + (NSString*) escapeHTML: (NSString*)str @@ -660,7 +691,7 @@ data = [[newPath dataUsingEncoding: NSUTF8StringEncoding] mutableCopy]; [data appendBytes: "?" length: 1]; - [self encodeURLEncodedForm: m into: data]; + [self encodeURLEncodedForm: m charset: nil into: data]; newPath = [NSString alloc]; newPath = [newPath initWithData: data encoding: NSUTF8StringEncoding]; [newPath autorelease]; @@ -995,9 +1026,16 @@ } - (NSUInteger) encodeURLEncodedForm: (NSDictionary*)dict + charset: (NSString*)charset into: (NSMutableData*)data { - return [[self class] encodeURLEncodedForm: dict into: data]; + return [[self class] encodeURLEncodedForm: dict charset: charset into: data]; +} + +- (NSUInteger) encodeURLEncodedForm: (NSDictionary*)dict + into: (NSMutableData*)data +{ + return [[self class] encodeURLEncodedForm: dict charset: nil into: data]; } - (NSString*) escapeHTML: (NSString*)str _______________________________________________ Gnustep-cvs mailing list Gnustep-cvs@gna.org https://mail.gna.org/listinfo/gnustep-cvs