JS编码转换(SringMVC框架下的KindEditor文本框数据丢失)(包括中文和特殊字符)

在使用StringMVC框架和KindEditor富文本编辑器时,遇到AJAX提交数据丢失问题,尤其是涉及到中文和特殊字符。通过JS的编码转换,如escape与encodeURIComponent,可以解决这个问题。文章描述了在多个FORM表单并用ajax局部提交时,如何处理&字符导致的数据丢失,并给出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      很久没有写博客了,也很久没有写代码,重写Blog之前,聊发几句,以此慰藉时间的飞逝。

      现在接到几份Offer,比较好的有3家,但是南京就这么大,好公司就那点儿,真的让我很烦恼,有时候过多的选择也是一种负担。今后在好好写2年代码,提升一下自己。记

录下自己的心得,也分享于给位同仁。

      前言完。

      最近公司项目的任务很少,和朋友接了个APP的私活,其中发布新闻时需要用到富文本,参考了很久选择了KindEditor这个插件。

      这次Blog只讲一下其中遇到的JS编码转换的问题。

      ------------------------

      新闻发布功能,肯定要有很多文本功能,因为页面功能繁多,又需要用到【图片/文件异步加载】功能,所以,一个JSP页面分了几个FORM表单,分别操作自己的FORM表

单,互不干扰。

      因为只要局部提交数据,并且返回列表页面,所以只用了【ajax】提交数据,没有用【submit】,那么所有的参数都是取值后手动拼写而成。

      那么,问题来了!!!

      代码如下:

      下面部分都是页面参数的值,当然了,最主要的问题就是artContent这里,大家请留意。
        var artNum = $("#artNumId").val();
	var artType = $("#artTypeSelectId").val();
	var artTitle = $("#artTitleId").val();
	var artBigImg = $("#artBigImgId").val();
	var artPerson = $("#artPersonId").val();
	var artContent = $("#content_1").val();
	var artMinImg = $("#artMinImgId").val();
	var isSendObj = $("#isSendId");
	var artOperator = $("#artOperatorId").val();
	var artLabel = $("#contentLabelSelId").val();
	var artTime = $("#timeLabelSelId").val();
	//开始没有这句话
	artContent = escape(encodeURIComponent(artContent));
	$.ajax({
		type:"post",
		url:"Pc200103",
		dataType:"text",
		data:"artNum="+artNum+"&artType="+artType+"&artTitle="+artTitle+"&artBigImg="+artBigImg+
			"&artPerson="+artPerson"+"&artContent="+artContent+"&artMinImg="+artMinImg+
			"&isSend="+isSend+"&artCheck="+artCheck+"&artOperator="+artOperator+"&artLabel="+
			artLabel+"&artTime="+artTime,
		success:function(responseText){
			p_articleManage(1);
		},
		error:function(XMLHttpRequest, textStatus, errorThrown){alert(XMLHttpRequest.status);}
	});
</pre><p>          因为富文本编辑,会存在很多空格,回车,换行,tab等特殊字符,在这次项目中,编辑富文本时候,如果敲一下空格,那么是占了半个字节,所以只是【半个空格①】,如果敲两下空格,那么就是一整个字节了,KindEditor会自动转换为【&nbsp;】  ,那么问题来了!</p><p>          因为ajax传输时候字符串就是用&拼接而成,那么现在富文本中又存在这样的&nbsp;就会发生识别错误的问题,大家应该能理解这个地方的问题所在吧。</p><p>          下面就是我要说的如何去转换字符了。JS自带的转换编码有3中,分别如下:</p><p>          </p><pre class="html" name="code">     escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
 
     encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
 
     encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z


           artContent = escape(encodeURIComponent(artContent));

           我项目中所遇到的就是&字符导致数据丢失,所以需要选择最后一种编码方式,而普通的中文编码,只需要用第二种格式即可。后台取值时候用如下代码即可:

           

     String artContent = req.getParameter("artContent");
     artContent=java.net.URLDecoder.decode(artContent,"UTF-8");


           如此,就能解决了该问题,当然每个人遇到的情况不一样,所需要的东西也不同。我之前就是纯粹的中文乱码问题了。

           不想写了,总觉得没那么有耐心了,慢慢来吧。

           如果有什么问题,希望各位指正,如果有需要讨论的,也可以加我的QQ:3674585

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值