本次使用的富文本插件是百度的ueditor。

经过一天的折腾,才明白当你原样将富文本的内容通过ajax的当成json传递出去的时候,
因为引号的关系会导致截取,本来<p style="color:red;"> 因为是字符串所以传递的时候默认在最前面和最尾端加了",
导致后台接收到的字符串变成<p style= ,一开始傻兮兮的用replace正则匹配将富文本里的" 都变成' ,但实际上你不能保证所有情况都被你匹配到,最后使用base64加密,后台解密的方法,终于成功。

jquery.base64.js

/**  base64.js**  Licensed under the BSD 3-Clause License.*    http://opensource.org/licenses/BSD-3-Clause**  References:*    http://en.wikipedia.org/wiki/Base64*/
;(function (global, factory) {typeof exports === 'object' && typeof module !== 'undefined'? module.exports = factory(global): typeof define === 'function' && define.amd? define(factory) : factory(global)
}((typeof self !== 'undefined' ? self: typeof window !== 'undefined' ? window: typeof global !== 'undefined' ? global: this
), function(global) {'use strict';// existing version for noConflict()global = global || {};var _Base64 = global.Base64;var version = "2.5.1";// if node.js and NOT React Native, we use Buffervar buffer;if (typeof module !== 'undefined' && module.exports) {try {buffer = eval("require('buffer').Buffer");} catch (err) {buffer = undefined;}}// constantsvar b64chars= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';var b64tab = function(bin) {var t = {};for (var i = 0, l = bin.length; i < l; i++) t[bin.charAt(i)] = i;return t;}(b64chars);var fromCharCode = String.fromCharCode;// encoder stuffvar cb_utob = function(c) {if (c.length < 2) {var cc = c.charCodeAt(0);return cc < 0x80 ? c: cc < 0x800 ? (fromCharCode(0xc0 | (cc >>> 6))+ fromCharCode(0x80 | (cc & 0x3f))): (fromCharCode(0xe0 | ((cc >>> 12) & 0x0f))+ fromCharCode(0x80 | ((cc >>>  6) & 0x3f))+ fromCharCode(0x80 | ( cc         & 0x3f)));} else {var cc = 0x10000+ (c.charCodeAt(0) - 0xD800) * 0x400+ (c.charCodeAt(1) - 0xDC00);return (fromCharCode(0xf0 | ((cc >>> 18) & 0x07))+ fromCharCode(0x80 | ((cc >>> 12) & 0x3f))+ fromCharCode(0x80 | ((cc >>>  6) & 0x3f))+ fromCharCode(0x80 | ( cc         & 0x3f)));}};var re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;var utob = function(u) {return u.replace(re_utob, cb_utob);};var cb_encode = function(ccc) {var padlen = [0, 2, 1][ccc.length % 3],ord = ccc.charCodeAt(0) << 16| ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8)| ((ccc.length > 2 ? ccc.charCodeAt(2) : 0)),chars = [b64chars.charAt( ord >>> 18),b64chars.charAt((ord >>> 12) & 63),padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),padlen >= 1 ? '=' : b64chars.charAt(ord & 63)];return chars.join('');};var btoa = global.btoa ? function(b) {return global.btoa(b);} : function(b) {return b.replace(/[\s\S]{1,3}/g, cb_encode);};var _encode = buffer ?buffer.from && Uint8Array && buffer.from !== Uint8Array.from? function (u) {return (u.constructor === buffer.constructor ? u : buffer.from(u)).toString('base64')}:  function (u) {return (u.constructor === buffer.constructor ? u : new  buffer(u)).toString('base64')}: function (u) { return btoa(utob(u)) };var encode = function(u, urisafe) {return !urisafe? _encode(String(u)): _encode(String(u)).replace(/[+\/]/g, function(m0) {return m0 == '+' ? '-' : '_';}).replace(/=/g, '');};var encodeURI = function(u) { return encode(u, true) };// decoder stuffvar re_btou = new RegExp(['[\xC0-\xDF][\x80-\xBF]','[\xE0-\xEF][\x80-\xBF]{2}','[\xF0-\xF7][\x80-\xBF]{3}'].join('|'), 'g');var cb_btou = function(cccc) {switch(cccc.length) {case 4:var cp = ((0x07 & cccc.charCodeAt(0)) << 18)|    ((0x3f & cccc.charCodeAt(1)) << 12)|    ((0x3f & cccc.charCodeAt(2)) <<  6)|     (0x3f & cccc.charCodeAt(3)),offset = cp - 0x10000;return (fromCharCode((offset  >>> 10) + 0xD800)+ fromCharCode((offset & 0x3FF) + 0xDC00));case 3:return fromCharCode(((0x0f & cccc.charCodeAt(0)) << 12)| ((0x3f & cccc.charCodeAt(1)) << 6)|  (0x3f & cccc.charCodeAt(2)));default:return  fromCharCode(((0x1f & cccc.charCodeAt(0)) << 6)|  (0x3f & cccc.charCodeAt(1)));}};var btou = function(b) {return b.replace(re_btou, cb_btou);};var cb_decode = function(cccc) {var len = cccc.length,padlen = len % 4,n = (len > 0 ? b64tab[cccc.charAt(0)] << 18 : 0)| (len > 1 ? b64tab[cccc.charAt(1)] << 12 : 0)| (len > 2 ? b64tab[cccc.charAt(2)] <<  6 : 0)| (len > 3 ? b64tab[cccc.charAt(3)]       : 0),chars = [fromCharCode( n >>> 16),fromCharCode((n >>>  8) & 0xff),fromCharCode( n         & 0xff)];chars.length -= [0, 0, 2, 1][padlen];return chars.join('');};var _atob = global.atob ? function(a) {return global.atob(a);} : function(a){return a.replace(/\S{1,4}/g, cb_decode);};var atob = function(a) {return _atob(String(a).replace(/[^A-Za-z0-9\+\/]/g, ''));};var _decode = buffer ?buffer.from && Uint8Array && buffer.from !== Uint8Array.from? function(a) {return (a.constructor === buffer.constructor? a : buffer.from(a, 'base64')).toString();}: function(a) {return (a.constructor === buffer.constructor? a : new buffer(a, 'base64')).toString();}: function(a) { return btou(_atob(a)) };var decode = function(a){return _decode(String(a).replace(/[-_]/g, function(m0) { return m0 == '-' ? '+' : '/' }).replace(/[^A-Za-z0-9\+\/]/g, ''));};var noConflict = function() {var Base64 = global.Base64;global.Base64 = _Base64;return Base64;};// export Base64global.Base64 = {VERSION: version,atob: atob,btoa: btoa,fromBase64: decode,toBase64: encode,utob: utob,encode: encode,encodeURI: encodeURI,btou: btou,decode: decode,noConflict: noConflict,__buffer__: buffer};// if ES5 is available, make Base64.extendString() availableif (typeof Object.defineProperty === 'function') {var noEnum = function(v){return {value:v,enumerable:false,writable:true,configurable:true};};global.Base64.extendString = function () {Object.defineProperty(String.prototype, 'fromBase64', noEnum(function () {return decode(this)}));Object.defineProperty(String.prototype, 'toBase64', noEnum(function (urisafe) {return encode(this, urisafe)}));Object.defineProperty(String.prototype, 'toBase64URI', noEnum(function () {return encode(this, true)}));};}//// export Base64 to the namespace//if (global['Meteor']) { // Meteor.jsBase64 = global.Base64;}// module.exports and AMD are mutually exclusive.// module.exports has precedence.if (typeof module !== 'undefined' && module.exports) {module.exports.Base64 = global.Base64;}else if (typeof define === 'function' && define.amd) {// AMD. Register as an anonymous module.define([], function(){ return global.Base64 });}// that's it!return {Base64: global.Base64}
}));

后台解码不需要引入jar包,jdk1.8自带:

  public String decodeBase64(String str){if(StringUtils.isEmpty(str)){return null;}byte[] bytes = Base64.getDecoder().decode(str);try {return new String(bytes, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return null;}

在自己的逻辑代码里判断富文本内容是否为空,

@PostMapping("/add")public Response addInfomation(ShareInfo shareInfo, @RequestParam("file") MultipartFile[] file) throws IOException {if(!file[0].isEmpty()){FileUtils.saveFile(file[0],filePath+file[0].getOriginalFilename());shareInfo.setFilename(file[0].getOriginalFilename());}else if(shareInfo!=null&&shareInfo.getId()!=null){ShareInfo resShare=shareInfoService.getById(shareInfo.getId());if(resShare!=null&&StringUtils.isNotEmpty(resShare.getFilename())){shareInfo.setFilename(resShare.getFilename());}}//判断是否为空,如果有值 BASE64解码if(StringUtils.isNotEmpty(shareInfo.getChineseContent())){shareInfo.setChineseContent(decodeBase64(shareInfo.getChineseContent()));}if(StringUtils.isNotEmpty(shareInfo.getEnglishContent())){shareInfo.setEnglishContent(decodeBase64(shareInfo.getEnglishContent()));}if(shareInfo.getId()==0){shareInfo.setCreateTime(new Date());shareInfo.setDownloadTimes(0);shareInfoService.add(shareInfo);}else{System.out.println("shareInfo:"+shareInfo.getFilename());shareInfoService.updateById(shareInfo);}return Response.success(shareInfo);}

最后就可以啦。

从网页复制内容到富文本、或者富文本里自己加样式,当ajax传参时候,总是莫名其妙丢失变成无意义的html,究竟是为什么呢相关推荐

  1. 网页复制内容修改(解决复制文本多空格问题,带标注信息(如版权信息))

    前言 适用需求 平时在使用网页复制文本的时候(双击三击或选中复制),有时候会多复制一个或几个空格(常见于换行),在某些有格式要求的时候就很麻烦,因为看不出来有空格或换行 在复制网页信息的时候希望能够带 ...

  2. 关于在wrod里如何重新排版网页复制内容

    在日常工作中经常遇到需要从网页或者其他格式文件复制文字的情况,费劲找到资料复制后发现排版极其糟糕,各自空格与空行,下面整理一下对应解决办法. 1 PDF格式常见问题    删除换行符 下图是直接从百度 ...

  3. Clipboard.js实现点击自动复制内容的功能

    Clipboard.js实现点击自动复制内容的功能 点击非文本框,自动复制,代码如下 value:<spanid="bar"class="btn"data ...

  4. 禁止用户复制网页的内容

    一.用HTML元素对象的onselectstart事件防止用户选择网页方法是body中插入如下代码 <body onselectstart="return false"> ...

  5. 无关标签的一般长文本网页正文内容抽取

    无关标签的一般长文本网页正文内容抽取 一般的网页内容抽取需要针对特定的网站进行特定的检查定位正文标签,指定抽取规则.但是如果需要抽取100个不同内容结构的网站正文,需要的就是100个不同的规则. 有没 ...

  6. ckeditor:复制内容到ckeditor时,只保留文本,忽略其样式解决方法

    ckeditor:复制内容到ckeditor时,只保留文本,忽略其样式解决方法 参考文章: (1)ckeditor:复制内容到ckeditor时,只保留文本,忽略其样式解决方法 (2)https:// ...

  7. word表格导出html代码,(网页源代码中的表格数据怎么导出excel)如何将把从WORD、EXCEL中复制的内容转换成HTML源代码,再通过网页表单提交上传到数据库?...

    如何将ASP页面中的表格生成一个Excel表,求源码 '给你个例子吧.保存为 asp文件看看.具体就在第一句. New Page 1PJ计画 第版 案件No 案件名 主门 顾客 PJ责任者 営业担当 ...

  8. Android中TextView文本或富文本内容自行换行的问题

    Android中TextView设置文本或富文本的时候出现没有到头就换行的问题. 网上有很多相关内容. 但大多都是关于文本换行的情况, 对于有富文本内容的情况, 如设置Spanned对象的内容, 会出 ...

  9. uniapp H5 公众号 复制内容 复制文本 API `setClipboardData` is not yet implemented 怎么处理?

    复制这段代码 新建clipboard.js //#ifdef H5 /** clipboard.js v2.0.4**/ !function(t,e){try{window.ClipboardJS=e ...

最新文章

  1. shop--10.店铺详情(后台+前端类似于shoplist)
  2. Linq表达式和Lambda表达式用法对比
  3. Linux 设备驱动的并发控制
  4. 用imspost制作catia后处理_这些有趣又精致的模型,都是用3D打印机打印出来的
  5. 对阵Flash 实战HTML 5技巧之页面设计
  6. 【转载】聪明说话35招
  7. OpenGL学习笔记(3) 纹理
  8. 用UIWebView加载本地图片和gif图
  9. 伺服速度控制模式接线图_伺服控制的三种模式,接线方式与参数设置的讲解
  10. 5. 软件工程 (一个大尺度的问题)
  11. 安卓系统的电视机_再送出一款智能电视、电视盒子、安卓手机通用TV直播软件...
  12. 虚拟服务器有没有加入bt端口,bt端口映射怎么做?
  13. CMake Error: The source directory “/“ does not appear to contain CMakeLists.txt.
  14. 【Spring】IoC,DI,两种代理方式,AOP定义和使用
  15. 计算机主板 上电顺序,笔记本电脑主板的上电过程
  16. 二维平面上线段与直线位置关系的判定
  17. 拼车小程序的市场应用与外包开发的建议
  18. Parallels Desktop 16 网络初始化失败
  19. 以下是根据在下的一些朋友芳名作诗,请朋友指点,继续增加中
  20. [三维视频融合]智慧安防解决方案

热门文章

  1. GaussDB(DWS)介绍
  2. VMware报错:VMware Workstation 不可恢复错误: (vmx)
  3. 使用 setoolkit 伪造站点窃取用户信息
  4. 【MATLAB】陷波滤波器作用效果分析
  5. uIP中国的协议文件:Ch01
  6. 3.数据仓库之确定粒度
  7. Cellular Pro简介
  8. dsa数字签名c语言编程,实验三DSA数字签名算法
  9. 2017年全国大学生电子设计竞赛:四旋翼自主飞行器探测跟踪系统(C题)主控RX23T,STM32F103VET6
  10. 【计算几何7】帝国边界划分问题【Voronoi图的原理】