历史版本2 :Web传递中文参数 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

1. 问题描述编辑

给iframe设置src嵌入某个报表时,往往会给报表传递初始的参数值,例如:
<iframe id="reportFrame" width="900" height="400" src="/WebReport/ReportServer?reportlet=/report.cpt&参数1=参数值&参数2=参数值..."></iframe>  

若参数名称、参数值甚至报表名称中包含中文或者特殊字符时,如果不进行编码转换,可能会出现一系列问题。

2. 使用cjkEncode对中文进行编码转换编辑

使用cjkEncode对调用报表的路径或参数进行编码,报表获取到参数后会自动进行解码,保证不会出现乱码等一系列情况。
cjkEncode是FR内部封装好的编码方法,在js中使用cjkEncode有两种方式,该节我们举例介绍。
2.1 加载finereport.js使用cjkEncode
cjkEncode方法在FineReport的JS库中已经预先提供了,用户可以在自己的网页中引入FineReport的JS库,就可以使用FR.cjkEncode对中日韩文字符进行编码,如下对调用报表的url进行cjkEncode:
  1. <html>    
  2.   <head>    
  3.   <title>FineReport Demo</title>    
  4.   <meta http-equiv="Content-Type" content="text/html; charset=GBK" />    
  5.   <script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script>  
  6.   <script language="javascript">  
  7.     function autoLoad(){  
  8.       var addr = FR.cjkEncode("/WebReport/ReportServer?reportlet=/doc/Primary/Parameter/Parameter.cpt&地区=华东");  
  9.       document.getElementById("reportFrame").src = addr;  
  10.     }  
  11.     window.onload = autoLoad;   
  12.   </script>  
  13.   </head>    
  14.   <body>    
  15.     <iframe id="reportFrame" width="900" height="400" ></iframe>    
  16.   </body>  
  17. </html>  
finereport.js使用的是jquery框架,若用户也使用了jquery,可能会造成冲突,这时建议不要引入finereport.js,而是将cjkEncode方法拷贝到页面中直接使用,详见下面的方法。
已完成示例请参照%FR_HOME%\WebReport|page_demo\parameter_ch.html
在线查看示例效果请点击parameter_ch.html
2.2 直接调用cjkEncode
加载finereport.js再引用cjkEncode,一方面可能会引起js冲突,另一方面也加载了很多不必要的方法。
若用户只需要使用该方法,可以将cjkEncode实现的代码复制到网页中或者用户自己的js文件中,然后再引用cjkEncode。

  1. <html>  
  2.   <head>    
  3.   <title>FineReport Demo</title>    
  4.   <meta http-equiv="Content-Type" content="text/html; charset=GBK" />    
  5.   <script type="text/javascript">  
  6.     //cjkEncode方法的实现代码,放在网页head中或者用户自己的js文件中  
  7.     function cjkEncode(text) {                                                                            
  8.       if (text == null) {         
  9.         return "";         
  10.       }         
  11.       var newText = "";         
  12.       for (var i = 0; i < text.length; i++) {         
  13.         var code = text.charCodeAt (i);          
  14.         if (code >= 128 || code == 91 || code == 93) {  //91 is "[", 93 is "]".         
  15.           newText += "[" + code.toString(16) + "]";         
  16.         } else {         
  17.           newText += text.charAt(i);         
  18.         }         
  19.       }         
  20.       return newText;         
  21.     }     
  22.   
  23.     function autoLoad() {  
  24.       var addr = cjkEncode("/WebReport/ReportServer?reportlet=/doc/Primary/Parameter/Parameter.cpt&地区=华东");  
  25.       document.getElementById("reportFrame").src = addr;  
  26.     }  
  27.   
  28.     window.onload = autoLoad;           //加载网页时调用autoLoad方法  
  29.   </script>  
  30.   </head>    
  31.   <body>    
  32.     <iframe id="reportFrame" width="900" height="400" ></iframe>    
  33.   </body>    
  34. </html>