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

Reply via email to