1. 程式人生 > >解決AJAX向後臺傳送HMTL程式碼失敗的問題

解決AJAX向後臺傳送HMTL程式碼失敗的問題

毫無疑問,解決辦法就是進行編碼後提交

今天在做一個非同步提交資料的時候,由於富文字編輯器產生了一些HTML程式碼,提交後臺會出錯。我測試了3種編碼進行提交

順帶提一句,Asp.NET的Request取得的表單值,以及各種控制元件的Text屬性,會自動對URL編碼的資料進行解碼,所以富文字編輯器在WebForm表單中提交不需要手動解碼

1、第一個就是JS種window物件自帶的encodeURIComponent函式,編碼後提交,但是後臺怎麼解碼呢。

就.NET而言,對應encodeURIComponent的解碼是Server.UrlDecode

2、第二種,手寫一個函式,動態建立一個div,把需要編碼的字串放進去,再取HTML出來,這就是HMTL編碼

其對應的.NET解碼為Server.HtmlDecode

function HTMLEncode(input) {
            var converter = document.createElement("DIV");
            converter.innerText = input;
            var output = converter.innerHTML;
            converter = null;
            return output;
        }

第三種其實還是window物件自帶的encodeURI,用法與encodeURIComponent基本一致

不過這裡有一點疑問,encodeURI和HMTL編碼不會對一些符號編碼,例如'=',所以原以為這樣編碼在get提交時會出問題,但是確實是正確提交了,還是對可靠性持懷疑態度?

以下是編碼方式不被轉換的字元:

encodeURI不編碼字元有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不編碼字元有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z


今天又做了一下AJAX請求帶有HTML標籤的資料,發現後臺Server.UrlDecode編碼的資料傳遞到前臺,encodeURIComponent,

encodeURI都無法正確解碼encodeURIComponent還好,只是‘+’沒有被還原為空格,encodeURI就更不理想了

對此找到了2個解決辦法:

1、後臺引用程式集 Microsoft.JScript, 對資料使用GlobalObject.escape函式編碼,前臺使用JS的unescape進行解碼

2、後臺仍然使用Server.UrlEecode,前臺使用encodeURIComponent解碼後進行字串替換。當然這種方法是強烈不推薦的