`

通过js encodeURIComponent传到服务器的乱码问题

阅读更多

一、场景:最近在做一个微博项目,用过微博的人都知道,微博里有话题这个概念,在textarea 里输入##,就代表一个话题。发布微博时使用的ajax方式提交,微博内容会拼到URI中传到服务器端,发现用IE8输入没有任何问题,但是使用IE6时,第二个#号会丢失。

 

二、解决过程:(1) 在JSP中使用encodeURIComponent来进行编码,两次编码:

     

content=encodeURIComponent(encodeURIComponent(content));
var url="${pageContext.request.contextPath}/BlogAction.do?method=doPublishBlog&content="+content; 

   (2) 在action中使用解码:

String content=(String)request.getParameter("content");
content=URLDecoder.decode(content,"UTF-8");

   这个问题得以解决。

 

三、扩展学习

   (1)js 中encodeURI 与 encodeURIComponent的区别

encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。经过我测试“#”也属于这个特殊字符的范畴,使用encodeURI编码时#是不会被编码的,所以上面场景的问题依然存在的,对于这种输入的内容,肯定是用encodeURIComponent。

 

    (2)IE对#的不同处理,从下面的header 内容可以看出来。

IE8:

POST /dcwb/BlogAction.do?method=doPublishBlog&content=%23���Ի���%23&decorator=exclude&gridId=&gridName=&videoId=&imageId=&topicId=

 

 IE6:

POST /dcwb/BlogAction.do?method=doPublishBlog&content=%23��������%20&decorator=exclude&gridId=&gridName=&videoId=&imageId=&topicId= HTTP/1.1

分享到:
评论
1 楼 Reset 2011-07-01  
为什么需要进行2次 encodeURIComponent 因为一次encodeURIComponent 传到后台乱码
为什么 一次encodeURIComponent 传到后台乱码?? 

你能告诉我为什么吗??

相关推荐

    extjs 前后台交互参数出现中文乱码问题的解决方法

    这里需要注意的是,对于包含中文的参数,通常会进行两次`encodeURI()`操作,以确保数据能够被正确地编码并传输到服务器端。 #### 后端解码处理 在后端服务器端(例如Java环境下),可以通过`java.net.URLDecoder....

    解决ajax乱码和页面传值问题

    Ajax发送和接收数据时,乱码问题主要出现在两个环节:发送请求时的数据编码和服务器返回数据的解码。以下是解决乱码的关键步骤: 1. 数据编码:在发送Ajax请求前,确保你的数据已经正确编码。如果数据包含中文或...

    从js向Action传中文参数出现乱码问题的解决方法

    尤其是当使用JavaScript向服务器端的Action传递参数时,乱码问题更为常见。以下详细解析了在JSP和JS交互中如何解决中文乱码问题,并提供了具体的代码示例。 ### 知识点解析 #### 1. 编码问题的重要性 在Web应用...

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

    总结一下,JS URL传中文参数引发的乱码问题通常可以通过以下步骤解决: 1. 使用`encodeURIComponent()` 或两次调用`encodeURI()` 对中文参数进行编码。 2. 服务器端使用相应的解码函数,如Java的`URLDecoder.decode...

    js url传值中文乱码之解决之道

    在使用JavaScript进行URL传值时,中文乱码是一个常见的问题。这主要是由于JavaScript在对URL进行编码时,使用的字符集编码规则可能与服务器端的解码规则不一致,导致中文字符无法正确解析。为了解决这个问题,我们...

    JS传值出现中文参数乱码的解决方法

    在JavaScript编程中,当涉及到中文字符的传递时,可能会遇到乱码的问题,尤其是在与服务器进行交互,如Ajax请求或者通过URL参数传递时。这通常是因为字符编码不一致导致的。以下是一些解决JS传值出现中文参数乱码的...

    ajax中文乱码问题解决方案

    **Ajax中文乱码问题详解与解决方案** 在开发Web应用程序时,尤其是在处理中文字符时,Ajax中文乱码问题是一个常见的困扰。这是因为不同的系统、浏览器、服务器和文件可能使用不同的字符编码,导致数据在传输过程中...

    jQuery Ajax传值到Servlet出现乱码问题的解决方法

    总的来说,解决Ajax传值到Servlet的乱码问题需要确保每个环节的编码设置一致,从JSP页面到Ajax请求,再到Servlet的接收和响应。只有这样,才能保证数据在整个传输过程中不发生乱码。记得在排查问题时,逐步检查每个...

    js传中文参数controller里获取参数乱码问题解决方法

    ### js传中文参数controller里获取参数乱码问题解决方法 #### 背景与问题描述 在Web开发中,前后端交互是常见的场景之一。当从前端(如JavaScript)向后端(例如Java中的Controller)传递包含中文字符的参数时,...

    JS解决url传值出现中文乱码的另类办法

    然而,当涉及到将中文数据通过URL传递时,可能会遇到中文乱码的问题。这是因为HTTP协议规定URL默认使用ISO-8859-1字符集,不支持中文字符。在Java Web应用中,服务器接收到请求时,如果没有正确处理字符编码,就会...

    Ajax传递中文参数到后台乱码的有效解决方法

    然而,当Ajax传递包含中文字符的参数时,由于编码问题,可能会导致后台接收到的数据出现乱码。本文将深入探讨如何有效地解决这一问题,确保中文参数在Ajax请求中能正确传输。 首先,我们要了解JavaScript中的编码...

    jsp传中文值

    ### jsp传中文值 #### 知识点一:JSP间传递中文导致的乱码问题 在Web开发中,特别是在使用Java Server Pages (JSP...通过综合运用以上技术手段,可以有效解决JSP页面间传递中文时的乱码问题,提高Web应用的用户体验。

    jq的get传参数在utf-8中乱码问题的解决php版

    标题中的“jq的get传参数在utf-8中乱码问题的解决php版”涉及到的是JavaScript的jQuery库(jq)通过GET方式发送请求时,遇到的URL编码与UTF-8字符集不兼容导致的乱码问题,以及如何在后端使用PHP来处理这个问题。...

    超链接传值不显示中文

    在网页开发过程中,经常遇到的一个问题是超链接传递中文参数时出现乱码或无法正确显示的问题。这个问题主要由编码转换不当引起,尤其是在涉及不同编码环境(如客户端与服务器端)交互的情况下更为突出。 #### 一、...

    在JavaScript中通过URL传递汉字的方法

    在JavaScript中,通过URL传递汉字是一种常见的需求,但是在传递汉字时经常会出现字符不全或变成乱码的问题。其原因是由于客户端IE浏览器的编码方式为GB2312(简体中文版WINDOWS的默认设置),而后台的C#代码使用utf8...

    FCKeditor笔记和中文名图片显示

    在Web环境中,由于编码和URL编码的问题,中文文件名在上传到服务器后可能会出现乱码或无法识别的情况。在FCKeditor中,如果直接尝试插入带有中文名的图片,可能会遇到以下问题: 1. **URL编码**:中文字符在URL中...

    JS的encodeURI和java的URLDecoder.decode使用介绍

    var data = "要传到服务器端的是值"; var encodedData = encodeURI(encodeURI(data)); // 调用两次encodeURI方法以确保所有字符都被编码 var href = "<%=basePath%>recordManager/test_js_decodeURI.action?params=...

    AJAX在GB2312的中文编码传输 AJAX特殊字符编码正确方法

    然而,当涉及到中文或其他非ASCII字符的传输时,编码问题会成为一个挑战,尤其是在GB2312这样的中文编码环境下。本文将深入探讨如何正确处理AJAX在GB2312编码下的中文和特殊字符传输。 首先,我们要理解GB2312编码...

Global site tag (gtag.js) - Google Analytics