中文字符处理encodeURI编码与decodeURI解码

转载 2015年11月19日 14:38:13


encodeURI(encodeURI(Name))可以多次加密

最近做了一个功能,将产生的JfreeChart报表及附加的Summary导出到文章,也就是将这些内容加入到文章所在的表中,然后在页面显示。

问题在于,summary的内容是动态的,并且是样式比较复杂table,一大堆标签,如果在手动后台处理,需要转义N多诸如“”特殊字符,并且,summary的内容已经生成好,并不需要重新拿一遍数据,所以比较好的做法就是,用Ajax以post方式将innerHTML的内容提交到后台,那么,这里出现一个问题,由于innerHTML有标签,中文等,需要编码一下才可以,否则会报编码错误的。

JS部分代码:

Js代码 复制代码 收藏代码
  1. <span style="font-size: small;">function exportArticle(){  
  2. var blogId=document.getElementById("blogId").value;  
  3. var css=document.getElementById("css").value;  
  4. var filename=document.getElementById("filename").value;  
  5. // var filename1=document.getElementById("filename1").value;  
  6. var start=document.getElementById("start").value;  
  7. var end=document.getElementById("end").value;  
  8. var strs=document.getElementById("weisummary").innerHTML;  
  9. strs=encodeURIComponent(strs);  
  10.   
  11. var reporturl='<%=request.getContextPath()%>/SingularController?service=exportReportToarticle';  
  12. var params='blogId='+blogId+'&css='+css+'&filename='+filename+'&types=1&start='+start+'&end='+end+'&constr='+strs;  
  13.   
  14.  new Ajax.Request(    
  15.        reporturl,  
  16.         {  
  17.             method: 'post',  
  18.             parameters: params,  
  19.             encoding:  'UTF-8',  
  20.             requestHeaders: {Accept:'application/json'},   
  21.             onComplete: toreport                
  22.         });  
  23.   
  24. }  
  25.   
  26.     function toreport(originalRequest){  
  27.       
  28.     var  jsonObj = originalRequest.responseText.evalJSON(false);  
  29.     if(jsonObj== true){  
  30.       alert("<s:text key='blog.health.exportArticleSucc'/>");  
  31.     }  
  32.           
  33.       
  34.     }</span>  

 

 

 

  之前,我用的是encodeURI编码innerHTML的内容,但是出现一个很奇怪的问题,我传的内容比较简单时可以传到service端,如果内容比较复杂就到不了service,后来调试时,发现以encodeURI编码后的内容,&,=等都没有编码,后来到网上查了一下,发现JS编码的方法有三种:

 

(以下是摘抄过来的,呵,因为已经写的很详细了,这里贴一下,原地址是:DIY部落(http://www.diybl.com/course/1_web/javascript/jsjs/200855/113679.html)

 

js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

1、   传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。

2、   进行url跳转时可以整体使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3、   js使用数据时可以使用escape

例如:搜藏中history纪录。

4、   escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。


最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支

持(form中的编码方式和当前页面编码方式相同)

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,'',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, '',(,),*,-,.,_,~,0-9,a-z,A-Z

escape 方法
对 String 对象编码以便它们能在所有计算机上可读,

escape(charString)

必选项 charstring 参数是要编码的任意 String 对象或文字。

说明
escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符

的十六进制数。例如,空格返回的是 "%20" 。

字符值大于 255 的以 %uxxxx 格式存储。

注意    escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。

encodeURI 方法
将文本字符串编码为一个有效的统一资源标识符 (URI)。

encodeURI(URIString)

必选的 URIString 参数代表一个已编码的 URI。

说明
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使

用 encodeURIComponent 方法对这些字符进行编码。

encodeURIComponent 方法
将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。

encodeURIComponent(encodedURIString)

必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明
encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码

,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。

如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行。

为什么要两次调用encodeURI来解决乱码问题

.encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码. . UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号. 假设页...
  • howlaa
  • howlaa
  • 2013年10月17日 11:23
  • 18270

javascript中encodeURI和decodeURI方法

一、基本概念 encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeUR...
  • woshixuye
  • woshixuye
  • 2013年05月06日 11:04
  • 31925

JavaScript decodeURI()与decodeURIComponent()区别

decodeURI()定义和用法:decodeURI()函数可对encodeURI()函数编码过的URI进行解码. 语法:decodeURI(URIstring) 参数描述:URIstring必需,一...
  • maxracer
  • maxracer
  • 2011年12月01日 14:30
  • 17451

两次调用encodeURI来解决乱码问题

encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号. 假设页面端输入的中文...
  • u012316120
  • u012316120
  • 2015年08月28日 16:29
  • 1661

为什么需要JS里常需要做两次encodeURI(url)

最近项目里经常出现前后端传送出现乱码的情况,不少同事问一为什么经常需要在JS里进行两次编码,这里进行下说明: 一般情况下, 发送 encodeURIComponent(parmeName)+...
  • posonrick
  • posonrick
  • 2016年05月31日 09:13
  • 3538

.Net工作流项目实战——前台到后台传值的编码、解码解决方案

在页面传值的过程中,通过url进行传值,通常会涉及一些隐私信息,中文信息。那么对于这些信息进行重新编码和解码就是一个刚需!本次在项目中,要从一个页面通过Js代码,给另一个页面传参,通过url传值的方式...
  • u011500356
  • u011500356
  • 2016年05月15日 20:21
  • 1128

decodeURI解码,由URIEncoder.encode("","GBK")编码的中文,问题解决

一、js内置编码,解码函数的介绍: @.JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:   ...
  • seashoreliu
  • seashoreliu
  • 2013年08月05日 19:18
  • 3113

使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码

URLDecoder 和 URLEncoder 用于完成普通字符串 和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。在本文中,我们以使用URLD...
  • q1035331653
  • q1035331653
  • 2018年01月03日 15:21
  • 32

在Android中正确解码用Javascript:escape()编码的中文字符

做H5页面开发时使用了Javascript的escape()函数进行URL编码,如果url中有中文,前端开发同学会对中文字符串进行escape()编码,然后再用unescape()解码,但是,当And...
  • qq_30740239
  • qq_30740239
  • 2016年10月09日 17:28
  • 995

在Java中正确解码用Javascript:escape()编码的中文字符

做页面开发时使用了Javascript的escape()函数进行URL编码,如果url中有中文,结果在JSP或Servlet中用request.getParameter()时取不到参数,只返回一个空值...
  • memray
  • memray
  • 2013年01月03日 20:52
  • 852
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:中文字符处理encodeURI编码与decodeURI解码
举报原因:
原因补充:

(最多只允许输入30个字)