docs: def to_urlencoded(self, lev=0):
          """
          Creates a string using the application/x-www-form-urlencoded format
  
          :return: A string of the application/x-www-form-urlencoded format
          """
  
          _spec = self.c_param
          if not self.lax:
              for attribute, (_, req, _ser, _, na) in _spec.items():
                  if req and attribute not in self._dict:
                      raise MissingRequiredAttribute("%s" % attribute,
                                                     "%s" % self)
  
          params = []
  
          for key, val in self._dict.items():
              try:
                  (_, req, _ser, _, null_allowed) = _spec[key]
              except KeyError:  # extra attribute
                  try:
                      _key, lang = key.split("#")
                      (_, req, _ser, _deser, null_allowed) = _spec[_key]
                  except (ValueError, KeyError):
                      try:
                          (_, req, _ser, _, null_allowed) = _spec['*']
                      except KeyError:
                          _ser = None
                          null_allowed = False
  
              if val is None and null_allowed is False:
                  continue
              elif isinstance(val, str):
                  # Should I allow parameters with "" as value ???
                  params.append((key, val.encode("utf-8")))
              elif isinstance(val, list):
                  if _ser:
                      params.append((key, str(_ser(val, sformat="urlencoded",
                                                   lev=lev))))
                  else:
                      for item in val:
                          params.append((key, str(item).encode('utf-8')))
              elif isinstance(val, Message):
                  try:
                      _val = json.dumps(_ser(val, sformat="dict", lev=lev + 1))
                      params.append((key, _val))
                  except TypeError:
                      params.append((key, val))
              elif val is None:
                  params.append((key, val))
              else:
                  try:
                      params.append((key, _ser(val, lev=lev)))
                  except Exception:
                      params.append((key, str(val)))
  
          try:
              return urlencode(params)
          except UnicodeEncodeError:
              _val = []
              for k, v in params:
                  try:
                      _val.append((k, v.encode("utf-8")))
                  except TypeError:
                      _val.append((k, v))
              return urlencode(_val)