栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript > Ajax教程

Ajax提交参数的值中带有html标签不能提交成功的解决办法(ASP.NET)

Ajax教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ajax提交参数的值中带有html标签不能提交成功的解决办法(ASP.NET)

最近在公司做资源及文章上传功能遇到一个小问题,被坑了好半天。

        该功能就类似利用富文本编辑器发布信息,但是用Ajax提交数据,因此提交参数值中不可避免的含有html标签。

        在本地运行代码一直没问题,总是可以提交成功,但是代码部署到线上就不能成功提交数据了,被坑了好久,找了好半天才找到问题所在。

        提交不成功的原因是因为我的提交数据中含有html标签,然后直接无法请求到我的目标地址。

         然后解决办法如下:

         1、在页面用JS的base64编码(类似加密)带有html标签的参数值。

         2、在目标地址获取到数据后,利用后台base64解码方法对获取到的数据进行解码即可。

          以下是我的JS的base64编码和解码方法代码:

//下面是64个基本的编码
 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 var base64DecodeChars = new Array(
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
   52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
   -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
   15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
   -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
   41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
 //编码的方法
 function base64encode(str) {
     var out, i, len;
    var c1, c2, c3;
     len = str.length;
    i = 0;
    out = "";
    while(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if(i == len)
{
      out += base64EncodeChars.charAt(c1 >> 2);
      out += base64EncodeChars.charAt((c1 & 0x3) << 4);
    out += "==";
     break;
   }
      c2 = str.charCodeAt(i++);
if(i == len)
  {
    out += base64EncodeChars.charAt(c1 >> 2);
     out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
      out += base64EncodeChars.charAt((c2 & 0xF) << 2);
      out += "=";
     break;
   }
c3 = str.charCodeAt(i++);
out += base64EncodeChars.charAt(c1 >> 2);
      out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
out += base64EncodeChars.charAt(c3 & 0x3F);
}
     return out;
   }
 //解码的方法
 function base64decode(str) {
     var c1, c2, c3, c4;
    var i, len, out;
     len = str.length;
     i = 0;
  out = "";
     while(i < len) {
      do {
   c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
 } while(i < len && c1 == -1);
if(c1 == -1)
  break;
      do {
   c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
 } while(i < len && c2 == -1);
if(c2 == -1)
   break;
      out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
      do {
   c3 = str.charCodeAt(i++) & 0xff;
   if(c3 == 61)
     return out;
   c3 = base64DecodeChars[c3];
 } while(i < len && c3 == -1);
if(c3 == -1)
   break;
out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
     do {
   c4 = str.charCodeAt(i++) & 0xff;
    if(c4 == 61)
     return out;
   c4 = base64DecodeChars[c4];
  } while(i < len && c4 == -1);
      if(c4 == -1)
   break;
out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
      }
     return out;
   }
 function utf16to8(str) {
     var out, i, len, c;
     out = "";
    len = str.length;
    for(i = 0; i < len; i++) {
      c = str.charCodeAt(i);
      if ((c >= 0x0001) && (c <= 0x007F)) {
   out += str.charAt(i);
 } else if (c > 0x07FF) {
    out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
     out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
    out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
  } else {
     out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
      out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
   }
}
    return out;
   }
 function utf8to16(str) {
   var out, i, len, c;
    var char2, char3;
    out = "";
    len = str.length;
   i = 0;
    while(i < len) {
     c = str.charCodeAt(i++);
    switch(c >> 4)
{ 
      case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
   // 0xxxxxxx
   out += str.charAt(i-1);
   break;
  case 12: case 13:
   // 110x xxxx  10xx xxxx
   char2 = str.charCodeAt(i++);
  out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
  break;
 case 14:
  // 1110 xxxx 10xx xxxx 10xx xxxx
  char2 = str.charCodeAt(i++);
   char3 = str.charCodeAt(i++);
    out += String.fromCharCode(((c & 0x0F) << 12) |
    ((char2 & 0x3F) << 6) |
    ((char3 & 0x3F) << 0));
   break;
 }
}
    return out;
  }

    页面调用JS方法进行base64编码代码如下:

 var articleContent = editor.getContent();
   articleContent = base64encode(utf16to8(articleContent));

     但是呢,又遇到一个新的问题,用JS对数据进行base64编码后,JS居然把加号(+)替换成了空格,造成我后台方法解码出来的数据不正确。

      解决办法如下:

      本人首先采用JS方法replace()方法进行替换,但是有错误,JS只是把我的第一个空格替换成了加号(+),最后解决办法如下。

      在后台(目标接受地址下)对获取到的数据,把空格替换成加号(+)。代码如下:       

string content = Request["content"].ToString();
      if (content.Contains(""))
 {
   content=content.Replace(" ", "+");
 }
      //byte[] sa = Convert.Frombase64String(content);
      //Encoding Ansi = Encoding.GetEncoding("GB2312");
      // content = Ansi.GetString(sa);
      content = base64Decrypt(content);//base64解码

       如果后台的base64编码和解码方法不会的请看下面:

/// 
    /// base64加密
    /// 
    /// 需要加密的字符串
    /// 
    public static string base64Encrypt(string input)
    {
      return base64Encrypt(input, new UTF8Encoding());
    }
    /// 
    /// base64加密
    /// 
    /// 需要加密的字符串
    /// 字符编码
    /// 
    public static string base64Encrypt(string input, Encoding encode)
    {
      return Convert.Tobase64String(encode.GetBytes(input));
    }
    /// 
    /// base64解密
    /// 
    /// 需要解密的字符串
    /// 
    public static string base64Decrypt(string input)
    {
      return base64Decrypt(input, new UTF8Encoding());
    }
    /// 
    /// base64解密
    /// 
    /// 需要解密的字符串
    /// 字符的编码
    /// 
    public static string base64Decrypt(string input, Encoding encode)
    {
      return encode.GetString(Convert.Frombase64String(input));
    }

以上所述是小编给大家介绍的Ajax提交参数的值中带有html标签不能提交成功的解决办法(ASP.NET),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/128290.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号