def encode_application_x_www_form_urlencoded(submit_name=nil)
successful = []
has_submit = false
@controls.each {|name, value, type, *rest|
case type
when :submit_button
if !has_submit && name == submit_name
successful << [name, value]
has_submit = true
end
when :checkbox, :radio
checked = rest[0]
successful << [name, value] if checked
when :text, :textarea, :password, :hidden
successful << [name, value]
when :select
selected_options = []
value.each {|option, selected| selected_options << option if selected }
selected_options.each {|option| successful << [name, option] }
else
raise "unexpected control type: #{type}"
end
}
accept_charset = @accept_charset.dup
charset = accept_charset.shift
begin
encoded_successful = successful.map {|name, value|
[name.encode_charset_exactly(charset), value.encode_charset_exactly(charset)]
}
rescue Iconv::Failure
if charset = accept_charset.shift
retry
else
encoded_successful = successful
end
end
Escape.html_form(encoded_successful)
end