# File lib/escape.rb, line 164
164:   def html_form(pairs, sep='&')
165:     r = ''
166:     first = true
167:     pairs.each {|k, v|
168:       # query-chars - pct-encoded - x-www-form-urlencoded-delimiters =
169:       #   unreserved / "!" / "$" / "'" / "(" / ")" / "*" / "," / ":" / "@" / "/" / "?"
170:       # query-char - pct-encoded = unreserved / sub-delims / ":" / "@" / "/" / "?"
171:       # query-char = pchar / "/" / "?" = unreserved / pct-encoded / sub-delims / ":" / "@" / "/" / "?"
172:       # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
173:       # sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
174:       # x-www-form-urlencoded-delimiters = "&" / "+" / ";" / "="
175:       r << sep if !first
176:       first = false
177:       k.each_byte {|byte|
178:         ch = byte.chr
179:         if %r{[^0-9A-Za-z\-\._~:/?@!\$'()*,]}n =~ ch
180:           r << "%" << ch.unpack("H2")[0].upcase
181:         else
182:           r << ch
183:         end
184:       }
185:       r << '='
186:       v.each_byte {|byte|
187:         ch = byte.chr
188:         if %r{[^0-9A-Za-z\-\._~:/?@!\$'()*,]}n =~ ch
189:           r << "%" << ch.unpack("H2")[0].upcase
190:         else
191:           r << ch
192:         end
193:       }
194:     }
195:     r
196:   end