`
hax
  • 浏览: 961315 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

表单数据提交时的字符编码问题

    博客分类:
  • AJAX
阅读更多
人老了,以前研究过的东西都忘记了。所以还是记录下来比较好。

废话不说,翠花,上代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>The Character Encoding for Form Submission</title>
<script>
function $(id) {
	return document.getElementById(id)
}

function createPropertyEditor(name) {
	var p = document.createElement('p')
	p.appendChild(document.createTextNode(name + ' = '))
	var input = document.createElement('input')
	input.type = 'text'
	var get = new Function('this.value = String($name); this.select()'.replace(/\$name/g, name))
	get.call(input)
	input.onfocus = get
	input.onchange = new Function('		\
		try {							\
			$name = this.value			\
		} catch(e) {					\
			alert(e.message)			\
		} finally {						\
			this.value = String($name)	\
		}								\
	'.replace(/\$name/g, name))
	p.appendChild(input)
	$('properties').appendChild(p)
}

var form

window.onload = function () {
	form = document.forms[0]
	createPropertyEditor('document.charset')
	createPropertyEditor('document.defaultCharset')
	createPropertyEditor('document.characterSet')
	createPropertyEditor('document.inputEncoding')
	createPropertyEditor('document.xmlEncoding')
//	createPropertyEditor('document.mimeType')
	createPropertyEditor('form.acceptCharset')
	createPropertyEditor('form.method')
	createPropertyEditor('form.enctype')
//	createPropertyEditor('form.encoding')
}
</script>
</head>
<body>
<form>
	<input name="_charset_" type="hidden">
	<input name="test" type="text" value="&#31616;&#20307;-&#32321;&#39636;-English">	
	<input type="submit">
	<div id="properties"></div>
</form>
</body>
</html>


如果你总是使用utf-8编码,则基本不用为编码问题伤脑筋。但是总有些时候,事情超出了你的掌控范围。

通常表单提交时将按照文档本身的编码进行编码。如果是一个gb2312的文档,如何按照utf-8编码提交呢?此外是否可以通知服务器,请求是按照何种方式编码的呢?

以上代码测试了浏览器为此类问题所提供的各种特性。可将上述代码保存为不同的编码,如UTF-8、GB2312、Big5等(可以加上meta httpequiv=content-type content=text/html;charset=xxx),然后进行测试(即修改document.charset和form.acceptCharset然后提交,观察URL参数的结果)。

以下是一些浏览器的测试结果(仅测试了GET请求):

        支持document.charset  支持form.acceptCharset  支持_charset_
IE6        Y                     N*                       Y
FF2        N                     Y                        Y
Safari3    Y                     Y                        N
Chrome1    Y                     Y                        N
Opera9     N*                    Y                        Y


由于手头安装的浏览器有限,有兴趣的同志可帮忙测试一下IE5、IE7、IE8、FF3以及其他浏览器。


说明:

1. document.charset
可获得文档的字符编码。
也可改写,从而影响到表单提交时所采用的编码。在IE中改变charset还会影响网页的字体。
IE专有属性,Webkit引擎也实现了该属性。FF2不支持,虽然有一个document.characterSet属性,但是只读。Opera9虽然可通过charset属性读取字符编码,但是改写该属性似无意义。

2. form.acceptCharset
按照HTML4规范,FORM上的accept-charset属性(DOM中为acceptCharset)表示服务器可接受的编码列表(以空格或逗号分割多种编码)。浏览器应选取其中一种ASCII兼容的编码(具体选择哪种,各浏览器自行决定——比如chrome虽然也用webkit引擎,但是在选择编码方面似乎与safari有一些不同)作为表单数据的编码。
IE6虽然有acceptCharset属性,但是无效果。(然而据一封古老的微软工程师在unicode组织邮件列表里的邮件表明,IE5也许支持?有兴趣同志可以测试一下。)

3. _charset_
当表单包含一个name为_charset_的hidden类型input,表单提交时,_charset_的value会被设为表单数据的字符编码。
IE5开始支持此特性。FF团队follow了此特性(https://bugzilla.mozilla.org/show_bug.cgi?id=18643)。

上述3个特性皆纳入了HTML5规范草案
2
1
分享到:
评论

相关推荐

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

    ### 转义表单提交字符处理函数 在Web开发中,确保用户输入的数据安全是非常重要的。不正确的处理可能会导致诸如XSS(跨站脚本攻击)等安全问题。因此,对用户提交的数据进行适当的转义是至关重要的。本文将详细介绍...

    FORM表单中文乱码问题分析与解决

    在 Web 开发中,中文乱码问题是一个常见的问题,尤其是在FORM表单传递参数时。这个问题的根本原因是对中文的编码与解码方式不一致。我们可以理解为对中文的加密与解密的密钥不一致。例如,用UTF-8对中文编码而用ISO-...

    Ajax开发过程表单提交数据出现乱码和解决办法

    ### Ajax开发过程中表单提交数据出现乱码及解决办法 在进行Ajax开发的过程中,经常会遇到一个令人头疼的问题:表单提交的数据出现乱码。...遵循以上原则,可以有效避免在Ajax开发过程中表单提交数据时出现乱码问题。

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

    总结,对于在JavaScript中通过表单提交URL参数包含特殊字符(如"+")的问题,可以通过以上两种方法来解决。第一种方法是通过动态创建表单元素并在其中对参数进行编码后提交,适用于不支持HTML5 formaction属性的旧版...

    字符编码过滤器 字符编码转换 post字符转换

    POST请求通常用于提交表单数据,这些数据可能包含各种字符,因此需要确保正确的编码才能正确解析和处理。在J2EE环境中,这通常涉及到读取请求体,然后根据预设或检测到的编码进行转换。 "encoding-filter.jar"可能...

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

    1. 页面编码设置:在JSP页面的头部,通常使用`&lt;meta&gt;`标签来指定页面的字符编码。例如: ```html ``` 这样确保了浏览器以UTF-8编码解析页面,防止中文字符在显示时出现问题。 2. 请求编码转换:JSP的`&lt;form&gt;`...

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

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

    字符编码

    常见的场景可能是用户通过HTTP表单提交非UTF-8编码的数据,服务器端需要正确识别和转换这些数据,以避免乱码问题。 一般来说,处理字符编码问题的步骤可能包括以下几点: 1. 确保web应用的配置文件(如web.xml)中...

    解决jsp提交乱码的问题

    - POST请求则是通过请求体来传递参数,当表单数据通过不同的字符集发送到服务器端时,如果服务器端没有正确设置字符编码,则也容易出现乱码现象。 #### 二、解决GET请求乱码问题 针对GET请求,可以通过以下几种...

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

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

    jsp页面提交乱码问题

    在进行Web开发时,特别是使用Java Server Pages (JSP)技术时,经常会遇到表单提交数据出现乱码的问题。这个问题主要出现在从客户端(如浏览器)提交的数据到服务器端的过程中。本文将详细介绍如何在JSP页面中正确...

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

    3. **Java代码处理**:在Servlet或Struts2等框架中接收表单数据时,确保使用正确的字符编码。例如,对于Servlet,可以使用`request.setCharacterEncoding("UTF-8")`来指定编码。 在Struts2框架中,解决乱码问题可能...

    易语言网页表单自动提交例程.rar

    这包括表单字段名和对应的值,可能需要编码处理(如URL编码)以符合网络传输规范。 3. **发送请求**:使用易语言的“发送数据”或“发送字符串”命令将构造好的请求发送到服务器。对于POST请求,数据通常会附加在...

    解决字符编码的过滤器

    例如,当用户提交包含中文或其他非英文字符的数据时,如果没有正确的字符编码设置,就可能会出现乱码现象。这不仅影响用户体验,还可能导致数据丢失或错误处理等问题。 #### 三、Struts2框架简介 Struts2是一个...

    java字符编码监听器

    在实际项目中,我们可能需要编写一些测试用例来验证字符编码过滤器的效果,比如包含特殊字符的表单提交,或者不同编码的URL请求等。 6. **最佳实践** - 为确保整个应用的一致性,建议在所有的HTTP响应中都明确指定...

    使用JQuery实现从JSON对象转换为form提交数据

    在处理表单数据时,jQuery的`serialize()`和`serializeArray()`方法尤为有用。 1. **JSON对象到表单数据的转换** 要将JSON对象转换为适合表单提交的数据格式,我们需要遍历JSON对象的键值对,构建一个字符串形式的...

    tomcat字符编码总结

    - **问题**: 当使用GET方式提交表单时,如果URIEncoding不是UTF-8,则可能会出现乱码。 - **解决方案**: 将`server.xml`中的URIEncoding设置为UTF-8,或者在接收数据时手动进行编码转换。 **2. 表单POST提交** - *...

    ajax提交表单到后台

    本主题将深入探讨如何使用jQuery库的AJAX功能将表单数据提交到后台,以及后台如何使用Spring框架来处理这些数据。下面将详细阐述这一过程。 ### 一、前端:使用jQuery的AJAX提交表单 1. **引入jQuery库**:首先...

    MySpringMVC-字符乱码处理.rar

    例如,当用户通过表单提交非ASCII字符时,如果服务器端的字符编码设置不正确,就可能导致乱码。 1. **HTTP请求参数编码**: Spring MVC默认使用ISO-8859-1作为HTTP请求参数的编码,这可能无法正确处理中文等非...

    不同编码的页面表单数据乱码问题解决方法

    本问题中,用户遇到了一种特殊的情况,即在一个使用UTF-8编码的页面上填写的表单数据在提交到使用GB2312编码的服务器后出现乱码,从而导致查询结果异常。 `accept-charset` 是HTML表单元素`&lt;form&gt;`的一个属性,它...

Global site tag (gtag.js) - Google Analytics