Web報表頁面如何傳遞中文參數

一、場景描述javascript

在用報表開發工具FineReport設計的web報表中,給iframe設置src嵌入某個報表時,每每會給報表傳遞初始的參數值,例如:html

<iframe id="reportFrame" width="900" height="400" src="/WebReport/ReportServer?reportlet=/report.cpt&參數1=參數值&參數2=參數值..."></iframe>  java

若參數名稱、參數值甚至報表名稱中包含中文或者特殊字符時,若是不進行編碼轉換,可能會出現一系列問題。好比下圖:jquery



 

今天我就來說講該如何如何傳遞中文參數。web

二、使用cjkEncode對中文進行編碼轉換框架

使用cjkEncode對調用報表的路徑或參數進行編碼,報表獲取到參數後會自動進行解碼,保證不會出現亂碼等一系列狀況。工具

cjkEncode是FR內部封裝好的編碼方法,在js中使用cjkEncode有兩種方式,該節咱們舉例介紹。開發工具

2.1加載finereport.js使用cjkEncodeui

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

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.      }     

相關文章
相關標籤/搜索