1. 程式人生 > >easyui前後臺轉義字符和普通字符的相互轉換問題

easyui前後臺轉義字符和普通字符的相互轉換問題

mbr 空格 方法 ring index 字段 chan lac 相互轉換

昨天碰到一個問題,公司前端使用的是easyui和jquery,頁面textarea編寫了html代碼,傳入後臺變成了&lt;&gt;類型代碼,這樣保存到數據庫是沒有問題的,但是在頁面顯示的時候需要顯示原來用戶輸入的<>這樣的字符,當然前端獲取到數據的時候是&lt;&gt;這樣的字符的時候會自動解析成我們想要的格式,但是當進入編輯textarea的時候數據會變成數據庫中存儲的&lt;&gt;形式的字符串,則需在easyui進入編輯------$(‘#dataGrid‘).datagrid(‘beginEdit‘,index);----之前將顯示的字段轉移成html類型的字符串。方法如下:

// 轉意符換成普通字符
function escape2Html(str) {
var arrEntities={‘lt‘:‘<‘,‘gt‘:‘>‘,‘nbsp‘:‘ ‘,‘amp‘:‘&‘,‘quot‘:‘"‘};
return str.replace(/&(lt|gt|nbsp|amp|quot);/ig,function(all,t){return arrEntities[t];});
}

當鼠標失去焦點的時候會觸發保存事件,以及onDblClickCell(index,field)事件,在$(‘#dataGrid‘).datagrid(‘acceptChanges‘);執行之後在textarea中邊將原來轉換成html代碼解析成html則不會顯示類似於字符串的html標簽。而是將該字符串當成代碼解析完成。所以此時需要將上次點擊行中的數據轉義成普通字符。

// 轉意符換成普通字符
function escape2Html(str) {
var arrEntities={‘lt‘:‘<‘,‘gt‘:‘>‘,‘nbsp‘:‘ ‘,‘amp‘:‘&‘,‘quot‘:‘"‘};
return str.replace(/&(lt|gt|nbsp|amp|quot);/ig,function(all,t){return arrEntities[t];});
}

但是僅僅這樣並不能解決問題,我使用的是這個來替代上一次點擊行中的文本,如下:

$("[field=‘字段值‘]").eq(protoIndex).find("div").eq(0).text(escape2Html(字段值));

類似於後臺html之間的轉換可以使用org.apache.commons.lang.StringEscapeUtils類來進行轉換。

// 去掉html標簽
function removeHtmlTab(tab) {
return tab.replace(/<[^<>]+?>/g,‘‘);//刪除所有HTML標簽
}
// &nbsp;轉成空格
function nbsp2Space(str) {
var arrEntities = {‘nbsp‘ : ‘ ‘};
return str.replace(/&(nbsp);/ig, function(all, t){return arrEntities[t]})
}
// 回車轉為br標簽
function return2Br(str) {
return str.replace(/\r?\n/g,"<br />");
}
// 去除開頭結尾換行,並將連續3次以上換行轉換成2次換行
function trimBr(str) {
str=str.replace(/((\s|&nbsp;)*\r?\n){3,}/g,"\r\n\r\n");//限制最多2次換行
str=str.replace(/^((\s|&nbsp;)*\r?\n)+/g,‘‘);//清除開頭換行
str=str.replace(/((\s|&nbsp;)*\r?\n)+$/g,‘‘);//清除結尾換行
return str;
}
// 將多個連續空格合並成一個空格
function mergeSpace(str) {
str=str.replace(/(\s|&nbsp;)+/g,‘ ‘);
return str;
}

easyui前後臺轉義字符和普通字符的相互轉換問題