解决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解码后进行字符串替换。当然这种方法是强烈不推荐的





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值