關於JS的編碼轉換問題
在進行JS開發過程中,尤其是在開發報表時,報表已整合到Web頁面中,透過在頁面傳遞引數至報表中時,會發現有時某些引數值,傳遞到報表中是顯示為問號或亂碼等等一系列不能正常顯示的情況。
這是由於瀏覽器和報表伺服器的編碼不同,字元多次進行編碼轉換時出現錯誤導致字元的顯示出現亂碼,尤其是中日韓文和特殊字元更容易出現亂碼問題。
以開發報表軟體FineReport為例,在給報表伺服器傳送請求之前,對URL或者只對URL裡面的引數名字和引數值,進行cjkEncode的編碼,該方式相容了各種不同的字符集,如ISO8859-1、 UTF-8、 GBK、 ENU_JP,尤其對中日韓文的處理採取了統一的方案。
javascript中FineReport字元轉換原理
在給報表伺服器傳送請求之前,對URL或者只對URL裡面的引數名字和引數值,進行cjkEncode的編碼。原始碼如下:
點選(此處)摺疊或開啟
-
function cjkEncode(text) {
-
if (text == null) {
-
return "";
-
}
-
var newText = "";
-
for (var i = 0; i < text.length; i++) {
-
var code = text.charCodeAt (i);
-
if (code >= 128 || code == 91 || code == 93) {//91 is "[", 93 is "]".
-
newText += "[" + code.toString(16) + "]";
-
} else {
-
newText += text.charAt(i);
-
}
-
}
-
return newText;
- }
經過編碼的URL或者Form表單,報表伺服器智慧的將這些字元正確的轉換過來。
cjkEncode方法在FineReport的JS庫中已經預先提供了,使用者只要載入了FR的JS庫,就可以使用FR.cjkEncode對中日韓文字元進行encode,如下示例:
1、 對URL進行cjkEncode
點選(此處)摺疊或開啟
-
<html>
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
-
<script type="text/javascript" src="ReportServer?op=emb&resource=finereport.js"></script>
-
<Script Language="JavaScript">
-
function frOpen() {
-
window.location=FR.cjkEncode("地區=華東");
-
}
-
</Script>
-
</head>
-
<body>
-
<input type="button" value="字元轉換1" onclick="frOpen()">
-
</body>
- </html>
如果只對引數值進行編輯轉換,在引數後面呼叫FR.cjkEncode()方法,如:
window.location=""+FR.cjkEncode("華東");
2、對Form表單進行cjkEncode
點選(此處)摺疊或開啟
-
<html>
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
-
<script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script>
-
<script>
-
function autoSubmit() {
-
var Region1 = document.getElementById('Region'); //獲取到引數Region所在文字框
-
Region1.value = FR.cjkEncode(Region.value); //對值引數值進行編碼轉化
-
Region1.name = FR.cjkEncode("地區"); //對引數控制元件名編碼轉換,如果引數名字為英文,則不需要此操作
-
document.FRform.submit();
-
}
-
</script>
-
<body>
-
<form name=FRform method=post action="/WebReport/ReportServer?reportlet=doc/Primary/Parameter/Parameter.cpt">
-
<input type="text" id="Region" name="地區" value="華東">
-
<input type="button" name="show" value= "檢視" onclick="autoSubmit()"/>
-
</body>
- </html>
3、特殊符號處理
如果在需要進行cjkEncode的URI的引數中包含特殊字元,比如%,#,$,=,&,/,?,+,@等字元時,需要在cjkEncode之後,再次呼叫javascript的encodeURIComponent對這些特殊字元進行編碼。如引數值是”%華%“這樣的字元,就需要寫成encodeURIComponent(FR.cjkEncode("%華%")),一定要先進行cjkEncode,然後再進行encodeURIComponent,完整程式碼如下:
點選(此處)摺疊或開啟
-
<html>
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
-
<script type="text/javascript" src="ReportServer?op=emb&resource=finereport.js"></script>
-
<Script Language="JavaScript">
-
function frOpen() {
-
window.location=FR.cjkEncode("地區=") +encodeURIComponent(FR.cjkEncode("%華%"));
-
}
-
</Script>
-
</head>
-
<body>
-
<input type="button" value="字元轉換1" onclick="frOpen()">
-
</body>
- </html>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21472864/viewspace-2123320/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 救命,關於類轉換問題
- 關於JSP預編譯的中文問題JS編譯
- 關於Java編碼規範的問題Java
- 關於jsp中轉發的問題JS
- 關於html編輯器的回車換行問題解決方案 (轉)HTML
- 關於時間轉換 SimpleDateFormat 的使用的問題ORM
- 關於JDON UTF版本中文編碼的問題
- 關於控制檯編碼的設定問題
- jsp的編碼問題JS
- 關於TIJ的編譯問題編譯
- 關於Ibatis 轉換 oracle date型別的問題BATOracle型別
- 關於URL編碼/javascript/jsurl編碼JavaScriptJS
- PHP 與 JS 的編碼問題PHPJS
- 關於檔案上傳下載的編碼問題
- 關於mysql字元和數字型別轉換的問題研究MySql字元型別
- 關於C++&Java中命令列編譯的問題 (轉)C++Java命令列編譯
- 關於原始碼問題。原始碼
- 關於jdon原始碼的問題原始碼
- 轉python編碼問題Python
- 編碼轉換
- 關於分組後欄位拼接的問題[行列轉換]『By duanzilin』
- 關於jsp建網站的問題JS網站
- 關於日期計算的問題 (轉)
- 關於jive的password密碼問題!密碼
- 關於JDK21控制檯字符集編碼問題JDK
- 關於xml編碼問題在VB,PHP,JAVA下的解決方案XMLPHPJava
- 關於js執行緒問題的解讀JS執行緒
- 急盼救命,關於JSP的include問題JS
- 字元編碼轉換字元
- URL編碼轉換
- js將字串轉換為編碼序列程式碼例項JS字串
- 關於網路的一點問題(轉)
- 對於一個編解碼問題的思考
- 關於 iconv 轉碼導致資料丟失的問題
- 關於struts標籤<html:link/>中漢字編碼的問題HTML
- php 的字元編碼轉換工具 (轉)PHP字元
- 關於kindeditor插入程式碼問題
- 關於浮動會錯亂的問題——轉換思維尋找替代方案