JS动态生成表单解决URL传中文乱码

作者:拾光

时间:2026-10-27

浏览:599

本文介绍了一种在前端通过JavaScript动态创建HTML表单并提交数据的方法,以解决传统URL传参方式在后台接收中文时出现的ISO-8859-1编码乱码问题。该方法利用POST方式提交非中文字段,而将中文参数作为隐藏域提交,从而避免URL编码限制,实现前后端数据交互的顺畅。

文章目录

URL传中文乱码问题背景

在Web应用开发中,前后台数据交互十分常见。有时需要将前台的中文数据通过URL参数传递至后台,但由于Java网络传输默认使用ISO-8859-1字符集,后台通过request.getParameter("message")获取数据时,中文往往显示为乱码。常见的解决方案是在前台对中文进行编码,后台再解码转换,但这显得繁琐。是否存在更简便的处理方式?

经过思考发现,表单提交可以正常传递中文,而URL方式却不行。是否必须依赖URL传值?这里提出一种基于动态表单的替代方案,具体示例如下。

假设应用场景为KPI列表页面,其中每个KPI项都有生成预警数据的功能。当点击列表中某KPI的生成数据按钮时,需将该KPI的id和name传递至后台。

传统URL传值方案

前端对应的js方法:

使用URL传值的写法:

代码如下:

function createData(indexId,indexName){
window.location.href="catalogAction.do?action=CreateIndexData&catalogId="+indexId+"&catalogName="+indexName+"&random="+Math.random();
                   }

由于KPI名称多为中文,采用上述URL传值方式,后台接收到的值必然出现乱码。

动态表单解决方案

若改用动态生成表单的方式,即可解决该问题:

代码如下:

function createData(indexId,indexName){
var urlStr = "catalogAction.do?action=CreateIndexData&PcatalogId=<c:out value='${catalogId}'/>&catalogId="+indexId+"&random="+Math.random();
var f= document.createElement('form');
f.action = urlStr;
f.method = 'post';
document.body.appendChild(f);
var temp=document.createElement('input');
temp.type= 'hidden';
temp.value=indexName;
temp.name='catalogName';
f.appendChild(temp);
f.submit();
}

通过Form方式提交中文字段,而非中文字段仍使用URL传参,即可轻松解决后台接收中文时的乱码问题。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章