    # File escape.rb, line 209
      def html_form(pairs, sep='&')
        r = ''
        first = true
        pairs.each {|k, v|
          # query-chars - pct-encoded - x-www-form-urlencoded-delimiters =
          #   unreserved / "!" / "$" / "'" / "(" / ")" / "*" / "," / ":" / "@" / "/" / "?"
          # query-char - pct-encoded = unreserved / sub-delims / ":" / "@" / "/" / "?"
          # query-char = pchar / "/" / "?" = unreserved / pct-encoded / sub-delims / ":" / "@" / "/" / "?"
          # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
          # sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
          # x-www-form-urlencoded-delimiters = "&" / "+" / ";" / "="
          r << sep if !first
          first = false
          k.each_byte {|byte|
            ch = byte.chr
            if %r{[^0-9A-Za-z\-\._~:/?@!\$'()*,]}n =~ ch
              r << "%" << ch.unpack("H2")[0].upcase
            else
              r << ch
            end
          }
          r << '='
          v.each_byte {|byte|
            ch = byte.chr
            if %r{[^0-9A-Za-z\-\._~:/?@!\$'()*,]}n =~ ch
              r << "%" << ch.unpack("H2")[0].upcase
            else
              r << ch
            end
          }
        }
        PercentEncoded.new_no_dup(r)
      end