中文字符处理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 方法进行。

举报

相关文章推荐

对于ajax传递中文乱码问题,研究js encodeURI 与request.HtmlEncode的区别

引入: 今天在研究ajax调用服务器一般处理程序的时候,发现中文乱码的问题。于是着手研究一下js端 和服务器端对html的编码和解码方式。 对于ajax中碰到的问题是: 在url传值中参数...

Js编码和Java后台解码

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

java 页面url传值中文编码&解码

URL参数中有中文值,传到服务端,在用request.getParameter()方法,得到的常常会是乱码。 这将涉及到字符解码操作,我们在应用中常常会用new String(fieldType.g...

参数编码 完全解决方案 (转)

参数编码规范一.摘要我们经常要在页面传递中文数据,但是往往被文字编码所困惑.有时不了解到底是浏览器编码问题还是服务器编码问题.本文分析了互联网传递数据的编码原理, 并且提出了完善易用的解决方案.二.原...

Javascript编码解码方法(decodeURIComponent)

在js编码解码中我们可以使用decodeURIComponent()与encodeURIComponent()函数进行处理,下面我们一起来看一个简单编码解码的例子吧。 javascr...

URL编码与两次encodeURI

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

encodeURIComponent编码后java后台的解码

解决方法一: JavaScript: window.self.location="searchbytext.action?searchtext="+encodeURIComponent(encod...
  • whaosy
  • whaosy
  • 2013-04-09 10:10
  • 30585

Java 中的两种异常(Checked exceptions 和 Unchecked exceptions)

Java中定义了两种类型的异常 Checked exceptions:checked exceptions继承自Exception类,调用抛出这种异常API的客户端代码必须要处理导常,否则是不能通过编...

js解码函数 escape,encodeURI,encodeURIComponent比较

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

JS中decodeURI()与decodeURIComponent()区别

摘要: 本文章就是介绍两个解码的函数,他们就是decodeURI()和decodeURIComponent()函数,这两个函数可以对特定函数生成的密码字符串进行解密操作,就可以生成为未解密的字符串,比...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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