`

提交表单时指定编码

阅读更多

1,提交表单时可以指定编码吗?

准确地说:提交表单时可以指定请求要素的编码吗?

如果是使用html的form表单是不行的.

下面是我做的实验,html如下:

 

不仅head中指定了编码为gbk,而且form属性accept-charset 也指定为gbk,但是提交表单时,后台获取到的request charset却是"UTF-8",

 

chrome和火狐浏览器中都是一样.

结论:

(a)html的form表单标签中无法指定request的编码.

(b)提交的请求编码是UTF-8

 

那么表单标签中的属性accept-charset有什么作用呢?

告诉浏览器提交表单时以什么编码方式对请求要素进行编码

 

如上图,指定了accept-charset 的编码为:UTF-8,页面的编码是utf-8,而head中指定GBK编码,所以

address 的值乱码了,本来应该是"中国",结果显示:

 中国,两个汉字,以UTF-8编码则有6个字节,因为在html的header中指定了GBK编码,所以6个字节按照GBK解码,就是3个汉字,因此乱码.

提交post请求时,3个汉字会以accept-charset 指定的编码(UTF-8)来编码,所以是9个字节:

 

所以accept-charset 只是指定了提交时对请求要素如何编码,但是并没有指定请求的编码.

通俗点:只是默默地做了事,但是没有告诉服务器.

 

 

2,提交表单时为什么要指定请求编码?

解决乱码:

告诉服务器,请求要素的编码方式,这样服务器才知道应该如何解码.

 

3,方案

使用HttpURLConnection 可以指定编码

如何指定呢?

huc.addRequestProperty("content-type", contentType);

 contentType的值为:application/x-www-form-urlencoded;charset=GBK

 

4,服务器如何获取请求编码?

String charEncoding = request.getCharacterEncoding();

/***
	 * Get request query string, form method : post
	 * 
	 * @param request
	 * @return
	 * @throws IOException
	 */
	public static String getRequestPostStr(HttpServletRequest request)
			throws IOException {
		byte buffer[] = getRequestPostBytes(request);
		if(ValueWidget.isNullOrEmpty(buffer)){
			return null;
		}
		String charEncoding = request.getCharacterEncoding();
		if (charEncoding == null) {
			charEncoding = "UTF-8";
		}
		return new String(buffer, charEncoding);
	}

 

 

  • 大小: 27.3 KB
  • 大小: 23.5 KB
  • 大小: 46.6 KB
  • 大小: 1.2 KB
  • 大小: 10 KB
  • 大小: 55.5 KB
1
3
分享到:
评论
1 楼 hw1287789687 2015-09-21  
<!DOCTYPE html>
<html lang="zh">
<head>
	<meta charset="GBK">
	<title>自动生成的Post请求</title>
</head>
<body>
<div>请求地址:http://hbjltv.com:80/info/request</div>
<div>head 编码:GBK</div>
<form style="display: block;" action="http://hbjltv.com:80/info/request" accept-charset="UTF-8" method="POST">
	<label>client_secret:</label> <input style="width: 600px" name="client_secret" value="ca8Pv2" ><br>
	<label>address:</label> <input style="width: 600px" name="address" value="中国" ><br>
	<label>age:</label> <input style="width: 600px" name="age" value="11" ><br>
	<label>client_id:</label> <input style="width: 600px" name="client_id" value="chanjetapp" ><br>
	<label>appSecret:</label> <input style="width: 600px" name="appSecret" value="gh7Wq5" ><br>
	<label>appKey:</label> <input style="width: 600px" name="appKey" value="c3e6ac00-96db-11e4-a5ed-180373f5f6fc" ><br>
	<input type="submit" value="提交" ><br>
</form>
</body>
</html>

相关推荐

    jsp中在提交表单时的中文处理问题

    这将告诉浏览器以UTF-8编码提交表单数据。但请注意,这并不保证服务器端会正确处理,还需要服务器端的配合。 3. 服务器端处理:在JSP中接收表单数据时,可以通过设置请求对象的编码来确保正确解码。通常在Servlet...

    关于\"form表单提交数据编码方式和tomcat接受数据解码方式的思考\"一文的纠错

    在IT行业中,表单提交和服务器接收数据的过程是Web应用中的基础操作,涉及到字符编码、解码的关键环节。本文将纠正“关于'form表单提交数据编码方式和tomcat接受数据解码方式的思考'”一文中可能存在的错误,并深入...

    提交表单生成html文件

    ### 提交表单生成HTML文件 #### 知识点概览 1. **HTML表单基本结构** 2. **表单提交方式与处理** 3. **JSP基础语法及使用** 4. **Java后台处理流程** 5. **文件操作:读写与创建** #### HTML表单基本结构 在给定...

    表单信息提交到指定邮箱

    根据提供的文件信息,本文将详细解释如何通过ASP脚本实现将表单信息提交至指定邮箱的功能。这不仅涉及具体的代码实现细节,还包括了对代码各部分功能的理解与应用。 ### 表单信息提交到指定邮箱 #### 核心概念解析...

    Ajax使用jQuery提交表单 文件

    在这个“Ajax使用jQuery提交表单 文件”中,我们将探讨如何利用jQuery实现Ajax提交表单,从而实现异步数据传输,提高用户体验。 首先,我们需要理解jQuery中的Ajax函数`$.ajax()`。这是一个核心函数,可以进行各种...

    java中用URLConnection_类post方式提交表单

    java中用URLConnection类post方式提交表单 java中用URLConnection类post方式提交表单是指在java应用程序中使用java.net.URLConnection类来实现POST方式的表单提交。POST方式是HTTP协议中的一种常见的请求方法,它...

    pdf表单提交-服务端接收处理显示.zip

    表单域的数据可以通过Acrobat的“提交表单”功能或者编程方式(如JavaScript)发送到服务器。 2. **数据提交机制**: PDF表单数据的提交通常有两种方式:HTTP POST和FTP。POST方法是更常见的方式,它将表单数据...

    表单提交原理

    - **使用AJAX提交表单** 用户填写表单后,点击提交按钮,JavaScript阻止默认的表单提交行为,然后使用AJAX将表单数据发送到服务器。成功接收响应后,可以在前端更新界面,无需刷新整个页面。 6. **工具支持** ...

    EXT异步提交FORM表单

    在现代Web应用开发中,异步提交表单是一种常见的技术手段,它能够提升用户体验,减少页面刷新带来的数据丢失风险,并能有效提高系统的响应速度。EXT框架(通常指的是Ext JS)作为一种成熟且功能丰富的JavaScript库,...

    转义表单提交字符处理函数

    通过以上介绍的函数及其用法,我们可以有效地处理表单提交的字符,确保数据在存储或显示时的安全性。在实际开发中,根据具体需求选择合适的函数是非常重要的。例如,在向数据库插入数据时,应使用`mysql_real_escape...

    java发起http请求提交表单

    在提交表单之前,还需要注意以下几个关键点: - **参数编码**:确保所有的表单参数都进行了正确的URL编码,以防止特殊字符导致的问题。 - **参数顺序**:某些场景下,参数的顺序可能会影响结果,特别是涉及到签名...

    httpclient测试登录并提交表单功能

    ### httpclient 测试登录并提交表单功能 #### 概述 本文将详细介绍如何使用Apache HttpClient库进行模拟登录以及提交表单数据的操作。通过一个具体的示例程序来演示这一过程,帮助读者理解整个流程。 #### 使用...

    ExtJs4.0 表单提交Demo

    在使用Ext Ajax提交表单前,通常需要先将表单数据序列化为JSON或URL编码格式。ExtJs 4.0的FormPanel对象提供了`getForm()`方法获取表单实例,然后通过`form.submit()`或`form.serialize()`方法完成数据的序列化。 ...

    VC 构造http协议数据的post上传图片类(MFC环境 带编码转换)模拟表单提交

    在模拟表单提交时,数据通常包含键值对,如"file"字段对应于图片文件内容。 5. **处理响应**:发送完数据后,我们需要读取服务器的响应。这可以通过CHttpFile的Read方法完成,然后根据HTTP状态码判断请求是否成功。...

    js的form表单提交url传参数(包含+等特殊字符)的两种解决方法

    这篇文章将介绍两种在JavaScript中处理表单提交时URL参数包含特殊字符(如"+")的解决方法。 首先,需要了解在URL中常用的特殊字符及其编码形式,这是因为这些字符如果直接出现在URL参数中,可能会被浏览器误解为...

    J2EE以GET和POST方式提交表单的乱码解决(受教了)

    下面我们将深入探讨如何解决J2EE环境下GET和POST方式提交表单时出现的乱码问题。 首先,我们要理解GET和POST的区别。GET方式会将表单数据附加到URL后面,而POST方式则将数据放在请求体中。由于GET方式的限制,它...

    tomcat过滤器,处理表单提交出现乱码

    当我们处理表单提交时,可能会遇到数据乱码的问题,尤其是在涉及非ASCII字符集(如中文、日文或韩文等)时。这通常与字符编码设置不正确有关。下面,我们将深入探讨这个问题,并提供解决方案。 首先,乱码问题通常...

    点击回车提交表单,应用Java技术实现。

    在这个例子中,我们利用JavaScript来监听键盘事件,并在用户按下Enter键时自动提交表单。 ```javascript document.onkeydown = function (evt) { var evt = window.event ? window.event : evt; // 兼容IE和其他...

    post提交网页表单.zip_vb post提交_vb 网页表单_vb使用post提交表单并获取返回值_表单

    在处理表单数据时,应确保正确编码每个字段。对于URL编码,VB中可以使用`Server.URLEncode`函数。在实际应用中,你可能需要根据实际情况处理错误,例如网络连接问题、服务器返回的错误状态码等。 此外,如果你的VB...

    form表单的异步回调方法

    当用户提交表单时,通常会触发一个HTTP请求,将数据发送到服务器进行处理。传统的表单提交方式会导致页面刷新,这在某些场景下并不理想,比如需要保持页面状态或者实现无刷新操作。在这种情况下,我们可以通过模拟...

Global site tag (gtag.js) - Google Analytics