做个asp环境下的页面,用到Ajax提交表单,接收页面编码是bg2312的,传的页面也是gb2312的,用javascrip的encodeURIComponent编码传递,接收中文老是乱码,狂抓了半天,页面编码换来换去也是解决不了,到网上狂搜,找到一篇能解决的文章。
文章提到关键是要两次encodeURIComponent转码,而我只是转了一次,结果花费了半天去捣鼓。
最终解决部分代码如下
创建Ajax对象省略……
单击后取得表单项目
function formToString(formObj){
var allStr="";
if(formObj){
var elementsObj=formObj.elements;
var obj;
if(elementsObj){
for(var i=0; i<elementsObj.length;i++){
obj=elementsObj[i];
if(obj.name!=undefined&&obj.name!=""){
if(i==0){
allStr =obj.name+"="+encodeURIComponent(encodeURIComponent(obj.value));//关键的两次转换
}
else{
allStr+="&"+obj.name+"="+encodeURIComponent(encodeURIComponent(obj.value));//关键的两次转换
}
}
}
}else{
alert("没有elements对象!");
return ;
}
}else{
alert("form不存在!");
return ;
}
return allStr;
}
接收asp页面:
<script language="javascript" type="text/javascript" runat="server">
function TextValue(str){
return (str == null ? "" : decodeURIComponent(str));
}
</script>
<%
Response.Write("接收的值= " & TextValue(Request.Form("Form_names")))//换成要显示的表单元素的Name属性值
%>