164: def html_form(pairs, sep='&')
165: r = ''
166: first = true
167: pairs.each {|k, v|
168:
169:
170:
171:
172:
173:
174:
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