URL传中文参数导致乱码的解决方案之encodeURI

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

[size=large]       通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码。解决方案有很多种。本文介绍如何通过encodeURI来解决中文乱码问题。

首先,在前端页面准备参数的时候,需要对中文参数进行encode处理:

var url = 'HelloWorldServlet?star_name='+
encodeURI(encodeURI("刘德华"));
window.open(url);

其次,在服务端后台程序代码中用java.net.Decoder进行解码,从而得到中文参数的真实值:

String starName = 
java.net.URLDecoder.decode(request.getParameter("star_name"),"UTF-8");

目的达到了。哈哈,很简单吧。不过此时你可能有个疑问,前端在进行encode编码是,为什么用了两次encodeURI,而服务器后端在解码时只解了一次?

原因是:容器会默认帮你解一次码。

此时,你可能又要问了,既然容器会默认解一次码,那么为什么不直接在前端只进行一次encode,服务端程序直接request.getParameter(“star_name”) ?画蛇添足了吧?

原因是:容器默认解码时采用的编码是容器的默认编码,可能是UTF-8,GBK,也可能是其他编码方式。这与你的应用的编码方式未必会一致。所以你直接获取的话可能会出现乱码。

当然也可以通过修改容器的默认编码,而实现“前端一次encode——后端直接获取”的途径获取中文参数。

例如:Tomcat的默认编码修改方式:

修改%TOMCAT_HOME%/conf/server.xml,找到这行代码:

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000"/>

在后面可以追加URIEncoding属性,例如:

<Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000" URIEncoding="UTF-8"/>

如果不方便改容器默认编码方式,或者应用程序本身就有多种编码方式的话,还是采取本文给出的解决方案,通过“前端两次encode——后端一次decode”的途径获取中文参数吧。

That’s all ![/size]

加密解密同时满足前端和后端使用 我们需要第前端输内容进行加密然后递到后端,我们该如何做呢?偶然间看到网络上有一个加密解密代码,然后我开始进入郁闷的道路,这些代码有时好有时又行了,问题在哪里呢? 我研究了很久,终于修复了错误,并讲加密解密代码分享给大家。首先上代码,以下代码同网络上类似的代码有区别,请特别注意。JS 相关 PHP相关代码以上内容大部分来自网络,但是我调试了很久,基本上看是类似但是都无法成功加密和解密。其中问题在于 base64 函数和 encodeURIComponent 相关函数带来的困扰。网络上的代码错误的原因: 阅读详情

相关推荐

前后端中Url编码方法的一点小区别(encodeURI与HttpUtility.UrlEncodeUnicode、encodeURIComponent与HttpUtility.UrlEncode

前端与后端的Url编码方法,尽管很多时候通用,但编码后的值并不完全相同,因为前端编码方法会排除对某些字符进行编码(各方法不编码的字符不尽相同), 而相应的后端编码方法并不针对相应这些字符都排除编码,并且得到的编码后的十六进制字符为小写字符(前端为相应的十六进制大写字母)

carcarrot的博客 1459

encodeURI前端加密,Java后端解密

document.forms['你得form的id'].xxxx(你的加密字段).value= btoa(encodeURI(encode))let encode= document.forms['你得form的id'].xxxx(你的加密字段).value;

长街的随心博客 1618

对于使用encodeURI编码,后台接收参数,在页面进行展示,IE浏览器只能显示部分信息,谷歌,火狐能全部显示

当我在页面应该展示6条数据时,使用IE浏览器只能显示前面的5条数据,使用谷歌浏览器和火狐浏览器就能完全显示,前台使用的是encodeURI进行编码,后来经过我验证发现是因为get方式提交对字符串长度是有限制。 HTTP 1.1 协议中对URL的长度是没有限制的 但是在实现中,服务器端和游览器端对URL的长度都是有限制的 服务器端的限制根据不同的配置会有不同的值 游览器端的限制由于浏览器的种类也各不

一树的花开 1511

请求-encodeURI

请求-encodeURIComponent

weixin_43390711的博客 852

encode url 兼容_URL中文参数导致乱码解决方案encodeURI

通过URL中文参数时,在服务端后台获取到的值往往会出现乱码问题,解决方案有很多种,本文主要介绍如何通过encodeURI来解决中文乱码问题:first:前端递参数的时候需要对中文参数进行两次encodeURI处理:​var requestUrl ='url?roleName='+encodeURI(encodeURI("rowObj.appName"));注:rowObj.appName​表示...

weixin_39828457的博客 557

前端汉字encode_URL中文参数导致乱码解决方案encodeURI

通过URL中文参数时,在服务端后台获取到的值往往会出现乱码问题,解决方案有很多种,本文主要介绍如何通过encodeURI来解决中文乱码问题:first:前端递参数的时候需要对中文参数进行两次encodeURI处理:?var requestUrl =‘url?roleName=‘+encodeURI(encodeURI("rowObj.appName"));注:rowObj.appName?表示...

weixin_35470511的博客 2405

url中拼接中文参数,后台接收为乱码的问题

现实项目中遇到页面URL中文中文参数值到,后台解析为乱码 遇到在URL中拼接中文的参数,后台拿到的数据为乱码的问题,这里来说一下问题出现的原因与解决方法。 大家比较关心的应该是解决的方法,因此先说解决方法。 解决方法 解决的方法是在客户端对这个中文参数进行编码,然后服务端再进行响应的解码就行了。 客户端编码(JavaScript) 页面 var url = "contract!select.action?chineseParam=" + encodeURI(encodeURI("我是中文参

学英语的程序员 2509

JS中URL中文参数引发的乱码问题

今天的项目中碰到了一个乱码问题,从JS里URL到服务器,URL中有中文参数,服务器里读出的中文参数来的全是“?”,查了网上JS编码相关资料得以解决。解决方法如下:1、在JS里对中文参数进行两次转码var login_name = document.getElementById("loginname").value;login_name = encodeURI(login_name

Seven_23的专栏 4021

JS URL中文参数引发的乱码问题

项目中碰到了一个乱码问题,从JS里URL到服务器,URL中有中文参数,服务器里读出的中文参数来的全是“?”,查了网上JS编码相关资料得以解决。 解决方法如下: 1、在JS里对中文参数进行两次转码 var login_name = document.getElementById("loginname").value; login_name = encodeURI(login_n

夜礼服假面 4005

JAVA 中URL中文参数乱码的处理方法

一般情况下url中文参数乱码,只要设置好页面编码格式,然后把tomcat的server.xml设置一下就好了,但是现在这个项目因为tomcat下面放的不止一个项目,改设置可能会引起其他项目的编码问题,所以不能改,为此颇纠结了一番,而网上很多方法就是用escape()、encodeURI()、encodeURIComponent()来编码,然后去后天通过硬编码new String(s.getBy

爱春秋 1万+

URL中文参数乱码问题

在做项目的时候遇到了这个问题,记录一下 我从数据一览表中选择一条数据,点击处理,这里url传参的时候有两个是中文参数,后端接收参数,显示在处理页面 但是,处理页面中这两个中文参数乱码了 解决方法: 一、 在前台,对URL中文参数执行两次encodeURI: 如果只进行一次encodeURI,得到的是UTF-8形式的URL,服务器端通过request.getParamet...

菜鸟逆袭之路 1万+

解决URL中文参数乱码问题及原理

解决方案 在前台,对URL中文参数执行两次encodeURI: var param = encodeURI(encodeURI("中文")); 后台取数据时使用 URLDecoder进行解码: String param = (String)request.getParameter("param"); param = URLDecoder.decode(param,"UTF-8"); 原理解析...

jesseXu的博客 571
上一篇: 廖雪峰的官方网站
下一篇: 在CentOS7上安装JDK1.8
zhxtpray
博客等级 码龄15年 14粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值