We love patches ;)
 I think we can preprocess by converting all ; to &. Is that OK?
 yes sounds right to me

QueryStringDecoder should also support ;
QueryStringDecoder currently does not parse
field1=value1;field2=value2
correctly.

http://en.wikipedia.org/wiki/Query_string says
This convention is a W3C recommendation.[3] W3C recommends that all web servers support semicolon separators in the place of ampersand separators.

src/main/java/org/jboss/netty/handler/codec/http/QueryStringDecoder.java
src/main/java/org/jboss/netty/handler/codec/http/QueryStringDecoder.java
diff --git a/src/main/java/org/jboss/netty/handler/codec/http/QueryStringDecoder.java b/src/main/java/org/jboss/netty/handler/codec/http/QueryStringDecoder.java
index 743875e5b80..94d2715923a 100644
--- a/src/main/java/org/jboss/netty/handler/codec/http/QueryStringDecoder.java
+++ b/src/main/java/org/jboss/netty/handler/codec/http/QueryStringDecoder.java
@@ -30,9 +30,11 @@
  * Splits an HTTP query string into a path string and key-value parameter pairs.
  * This decoder is for one time use only.  Create a new instance for each URI:
  * <pre>
- * {@link QueryStringDecoder} decoder = new {@link QueryStringDecoder}("/hello?recipient=world");
+ * {@link QueryStringDecoder} decoder = new {@link QueryStringDecoder}("/hello?recipient=world&x=1;y=2");
  * assert decoder.getPath().equals("/hello");
  * assert decoder.getParameters().get("recipient").equals("world");
+ * assert decoder.getParameters().get("x").equals("1");
+ * assert decoder.getParameters().get("y").equals("2");
  * </pre>
  *
  * @author <a href="http://www.jboss.org/netty/">The Netty Project</a>
@@ -73,7 +75,8 @@ public QueryStringDecoder(String uri, Charset charset) {
             throw new NullPointerException("charset");
         }
 
-        this.uri = uri;
+        // http://en.wikipedia.org/wiki/Query_string
+        this.uri = uri.replace(';', '&');
         this.charset = charset;
     }
 
@@ -97,7 +100,8 @@ public QueryStringDecoder(URI uri, Charset charset){
             throw new NullPointerException("charset");
         }
 
-        this.uri = uri.toASCIIString();
+        // http://en.wikipedia.org/wiki/Query_string
+        this.uri = uri.toASCIIString().replace(';', '&');
         this.charset = charset;
     }
 
