用get方式提交请求的url带有中文参数

又碰到JSP页面中文乱码问题,经过一次encodeURI处理后仍旧是乱码,后来经过两次encodeURI后正常显示中文

以前也碰到过同样的问题,没深究,这次网上搜集了一些资料,记录下来留做备份

_____________________________________________________

前端JS:

var name="中文";

var url = "demo.jsp?name=" +name;

url=encodeURI(url);

url=encodeURI(url); //写一个不行。如果写一个就是????号。
服务端获取:

String name=request.getParameter("name");

name = java.net.URLDecoder.decode(name,"UTF-8");

System.out.println(name);

_____________________________________________________

因为Tomcat服务器会自动帮你做一次URLDecode,所以再加上你自己在代码里面写的URLDecode,一共就是两个Decode了,既然要两次Decode,当然就需要两次Encode了。或许你会问,干脆只Encode一次,然后在java代码里不Decode,呵呵,这个也是不行的,这其实也就是为什么要进行Encode的原因吧

--------------------------------------------------------------------------------------------------------

一般情况下, 发送 encodeURIComponent(parmeName)+"="+encodeURIComponent(parmeValue); 接收时, 直接 String paramValue = request.getParameter(paramName); // 容器自动解码.
我们知道 encodeURIComponent 使用的是 UTF-8 编码规则来编的. 如果 request.getParameter(paramName) 时,容器也按 UTF-8 解的话,是正确的. 根本无须在客户端 进行二次的 encodeURIComponent(...)
如果 request.getParameter(paramName),容器没有按 UTF-8 解的话, 结果只有一个,就是乱码! 容器按什么编码来解码,决定于 request.setCharacterEncoding(***) 或者 服务器程序配置.
如果你在 jsp 程序中,能够 request.setCharacterEncoding("UTF-8"), 并且 修改服务器配置,让容器在解 GET 提交的参数时,使用 UTF-8.
客户端提交前不用二次编码, 接收时,也只要直接 request.getParameter(paramName) 即可
---------------------
为什么网上会有人提出在客户端对字符串重复编码两次呢. 如果因为项目需要,不能指定容器使用何种编码规则来解码提交的参数, 比如:需要接收来自不同页面,不地编码的参数内容时。 (又或者是开发人员被这有点复杂的东东搞得晕头转向,不懂得如何正确的去做好这接收参数的工作) 这个时候,在客户端对参数进行二次编码,可以有效的避开

时间: 2024-08-08 17:44:44

用get方式提交请求的url带有中文参数的相关文章

java的url有中文参数导致乱码

话不多说,直接粘代码 发送方 UrlParaCode.jsp <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <html> <head> <title>My JSP 'UrlParaCode.jsp' starting page</title> </head> <body> &l

ajax提交请求为啥url要用这个函数encodeURI

参考如下: 如果你是通过form提交的,那就不需要用这个了.但是如果是你使用url的方式例如:ajax提交到后台的,就需要对url进行encodeURI编码,否则,会导致后台出现各种乱码,不加encodeURI的话,默认浏览器编码格式提交,这样的话,浏览器不同,传到后台的值也就不同了,所以建议使用encodeURI统一编码为utf-8的格式到后台,然后后台再处理再解码就行了,如果后台是utf-8的,好像也可以不手动解码,但是建议加上解码,避免发布环境不同的时候,会出现问题. http://zhi

关于(textarea)回车换行符在提交请求(URL)时消失的处理

关于(textarea)回车换行符在提交请求(URL)时消失的处理,有时候,我们在页面输入查询时,想多个同时查询,然后,回车隔开每个查询的内容. 后台只能收到字符串,没有回车换行符. 如下面的一个请求 window.location = "${ctx}/post/cusQueryMailExport?customerId="+customerId +"&postTimeStart="+postTimeStart+"&postTimeEnd=

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

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

URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致

下午,计划2个小时搞定,个人官网第6次升级,就可以干点轻松的事了,结果,下午多搞了2个小时,晚上又搞了2个小时,才搞定. 最后一个世界难题是,URL传递中文参数. 问题大致是这么出现的:我为"博客雷观" 这个栏目,增加了"全文搜索"功能,用lucene实现的.因此,需要传递中文参数.搜索框表单提交,传递中文,很简单就搞定了. 搜索之后的分页url,需要带上当前的"搜索词" ,比如"程序员",我在本地很轻松就搞定了.无非就是这样

url 传递中文参数乱码问题的终极解决方法。

估计很多人在做web开发的时候,都会碰到过url传递中文参数,有时候会出现乱码的问题,但有些项目或者环境,又不会有问题.当遇到乱码的时候,上网找了很多解决方案,比如: 页面设置它的编码方式,改成utf-8 或者gb2312. encodeURI(url),也有人说要2个encodeURI,如:window.location.href = encodeURI('b.html?cId='+id+"&cName="+encodeURIComponent(name)); 然后后台Str

jsp的url后跟中文参数传参出现乱码

①重新编码:String urlParam= request.getParameter("urlParam");  urlParam= new String(urlParam.getBytes("ISO-8859-1"), "UTF-8"); ②tomcat中统一编码 tomcat  的server.xml中在相对应的端口中加下面两句useBodyEncodingForURI="true" URIEncoding="

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

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

解决URL带中文参数乱码问题

通过配置Tomcat来解决URL代中文参数乱码的问题. 首先打开Tomcat安装目录 打开conf文件夹 打开server.xml,在大约65行的位置,加一个属性 URIEncoding="UTF-8" 这样就支持Url中文参数了.