通过js encodeURIComponent传到服务器的乱码问题
一、場(chǎng)景:最近在做一個(gè)微博項(xiàng)目,用過(guò)微博的人都知道,微博里有話題這個(gè)概念,在textarea 里輸入##,就代表一個(gè)話題。發(fā)布微博時(shí)使用的ajax方式提交,微博內(nèi)容會(huì)拼到URI中傳到服務(wù)器端,發(fā)現(xiàn)用IE8輸入沒(méi)有任何問(wèn)題,但是使用IE6時(shí),第二個(gè)#號(hào)會(huì)丟失。
?
二、解決過(guò)程:(1) 在JSP中使用encodeURIComponent來(lái)進(jìn)行編碼,兩次編碼:
?????
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");???這個(gè)問(wèn)題得以解決。
?
三、擴(kuò)展學(xué)習(xí)
?? (1)js 中encodeURI 與 encodeURIComponent的區(qū)別
encodeURI 方法返回一個(gè)編碼的 URI。如果您將編碼結(jié)果傳遞給 decodeURI,那么將返回初始的字符串。encodeURI 方法不會(huì)對(duì)下列字符進(jìn)行編碼:":"、"/"、";" 和 "?"。請(qǐng)使用 encodeURIComponent 方法對(duì)這些字符進(jìn)行編碼。經(jīng)過(guò)我測(cè)試“#”也屬于這個(gè)特殊字符的范疇,使用encodeURI編碼時(shí)#是不會(huì)被編碼的,所以上面場(chǎng)景的問(wèn)題依然存在的,對(duì)于這種輸入的內(nèi)容,肯定是用encodeURIComponent。
?
??? (2)IE對(duì)#的不同處理,從下面的header 內(nèi)容可以看出來(lái)。
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
總結(jié)
以上是生活随笔為你收集整理的通过js encodeURIComponent传到服务器的乱码问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java全半角转换
- 下一篇: freemarker元素的属性为空