code: public static void decodeTo(String content, MultiMap map, String charset)
      {
          if (charset==null)
              charset=StringUtil.__ISO_8859_1;
  
          synchronized(map)
          {
              String key = null;
              String value = null;
              int mark=-1;
              boolean encoded=false;
              for (int i=0;i<content.length();i++)
              {
                  char c = content.charAt(i);
                  switch (c)
                  {
                    case '&':
                        value = encoded
                            ?decodeString(content,mark+1,i-mark-1,charset)
                            :content.substring(mark+1,i);
                        
                        mark=i;
                        encoded=false;
                        if (key != null)
                        {
                            map.add(key,value);
                            key = null;
                        }
                        break;
                    case '=':
                        if (key!=null)
                            break;
                        key = encoded
                            ?decodeString(content,mark+1,i-mark-1,charset)
                            :content.substring(mark+1,i);
                        mark=i;
                        encoded=false;
                        break;
                    case '+':
                        encoded=true;
                        break;
                    case '%':
                        encoded=true;
                        break;
                  }                
              }
              
              if (key != null)
              {
                  value =  encoded
                      ?decodeString(content,mark+1,content.length()-mark-1,charset)
                      :content.substring(mark+1);
                  map.add(key,value);
              }
              else if (mark<content.length())
              {
                  key = encoded
                      ?decodeString(content,mark+1,content.length()-mark-1,charset)
                      :content.substring(mark+1);
                  map.add(key,"");
              }
          }
      }
docs: Decoded parameters to Map.
  @param content the string containing the encoded parameters