中文字符处理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
  • 14077

Js编码和Java后台解码

注: 在使用get提交,url传递参数的时候,会带来中文乱码的问题,对此可以使用js编码来解决。     Js编码的几种方式区别: 1.window.escape()与HttpUtility...
  • kalision
  • kalision
  • 2013年03月06日 10:20
  • 37657

URL编码与两次encodeURI

当使用地址栏提交查询参数时,如果不编码,非英文字符会按照操作系统的字符集进行编码提交到服务器,服务器会按照配置的字符集进行解码,所以如果两者不一致就会导致乱码。 encodeURI函数采用U...

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

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

encodeURI来解决URL传递时为什么需要进行两次encodeURI编码

说明:1 .encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.         2. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同...

encode url 编码和解码处理

转自:http://hi.baidu.com/bookun/item/a92138c3ebe1eb0fad092f2b javascript urlencode 推荐 encodeURICompon...
  • leeafu
  • leeafu
  • 2012年10月22日 11:39
  • 6172

encodeURIComponent传入后台解码

$(document).ready(function() { $("#name").focus(); $("#inputForm").validate({ rules:{ ...

【python】 关于去掉转义字符\,输出中文字符(decode("string_escape"))

假如有一个GBK的字符aa='\\xC1\\xBD',要输出中文,那么就要利用decode("string_escape")命令,去掉转义字符\,例如下面的代码: #coding=gbk impo...

使用encode()、decode()解决中文乱码问题

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。       encode的作用...

中文乱码 encodeURI来解决URL传递时的中文问题

解决中文乱麻问题,页面端发出的数据作两次encodeURI var name="张三"; encodeURI(encodeURI(name)); 后台解码:  URLDecoder.d...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:中文字符处理encodeURI编码与decodeURI解码
举报原因:
原因补充:

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