Bootstrap富文本组件wysiwyg数据保存到mysql的方法


Posted in Javascript onMay 09, 2016

Bootstrap提供了一个叫wysiwyg的富文本组件,用来显示和编辑富文本数据,但如何将编辑后的数据保存到MySQL数据库,却不得而知。另外,如何将mysql数据库中的数据显示到wysiwyg也不得而知,对于这两个问题,让我来告诉你解决方案!

一、效果展示

首先,我们先来看看效果如何:

Bootstrap富文本组件wysiwyg数据保存到mysql的方法

富文本中有一张图片,还有一个数字列表
我们可以看到编辑后的数据保存成功,以及保存后对应的展示。

二、富文本

度娘对于富文本的解释如下:

富文本格式(Rich Text Format, 一般简称为RTF)是由微软公司开发的跨平台文档格式。大多数的文字处理软件都能读取和保存RTF文档。RTF是Rich TextFormat的缩写,意即多文本格式。这是一种类似DOC格式(Word文档)的文件,有很好的兼容性,使用Windows“附件”中的“写字板”就能打开并进行编辑。RTF是一种非常流行的文件结构,很多文字编辑器都支持它。一般的格式设置,比如字体和段落设置,页面设置等等信息都可以存在RTF格式中,它能在一定程度上实现word与wps文件之间的互访。
如果说富文本不包含图片,我们可以使用普通的html转码方法,见标题四;如果富文本包含图片,普通的html转码已经满足不了我们了,就需要用到jquery.base64.js,见标题三。

那么同时,我们看一看mysql字段的定义:

`description` longtext NOT NULL COMMENT '项目详细描述',

字段类型为longtext(LongText 最大长度4294967295个字元 (2^32-1),虽然我也不知道到底有多大)。

三、jquery.base64

①、引入jquery.base64.js

<script type="text/javascript" src="${ctx}/components/jquery/jquery.base64.js"></script>

同时设置utf-8编码,确保中文不乱码.

$.base64.utf8encode = true;

②、富文本表单提交

var editor = "<input type='hidden' name='" + $this.attr("name") + "' value='"
                        + $.base64.btoa($this.html()) + "' />";

关键代码:将富文本对象的html值转换为base64,然后封装到表单form中。
详细见如下(一整个form提交的表单封装,参照与dwz框架):

/**
 * 带文件上传的ajax表单提交
 * 
 * @param {Object}
 *   form
 * @param {Object}
 *   callback
 */
function iframeCallback(form, callback) {
 YUNM.debug("带文件上传处理");

 var $form = $(form), $iframe = $("#callbackframe");

 // 富文本编辑器
 $("div.editor", $form).each(
   function() {
    var $this = $(this);
    var editor = "<input type='hidden' name='" + $this.attr("name") + "' value='"
      + $.base64.btoa($this.html()) + "' />";
    $form.append(editor);
   });

 var data = $form.data('bootstrapValidator');
 if (data) {
  if (!data.isValid()) {
   return false;
  }
 }

 if ($iframe.size() == 0) {
  $iframe = $("<iframe id='callbackframe' name='callbackframe' src='about:blank' style='display:none'></iframe>")
    .appendTo("body");
 }
 if (!form.ajax) {
  $form.append('<input type="hidden" name="ajax" value="1" />');
 }
 form.target = "callbackframe";

 _iframeResponse($iframe[0], callback || YUNM.ajaxDone);
}
function _iframeResponse(iframe, callback) {
 var $iframe = $(iframe), $document = $(document);

 $document.trigger("ajaxStart");

 $iframe.bind("load", function(event) {
  $iframe.unbind("load");
  $document.trigger("ajaxStop");

  if (iframe.src == "javascript:'%3Chtml%3E%3C/html%3E';" || // For
  // Safari
  iframe.src == "javascript:'<html></html>';") { // For FF, IE
   return;
  }

  var doc = iframe.contentDocument || iframe.document;

  // fixing Opera 9.26,10.00
  if (doc.readyState && doc.readyState != 'complete')
   return;
  // fixing Opera 9.64
  if (doc.body && doc.body.innerHTML == "false")
   return;

  var response;

  if (doc.XMLDocument) {
   // response is a xml document Internet Explorer property
   response = doc.XMLDocument;
  } else if (doc.body) {
   try {
    response = $iframe.contents().find("body").text();
    response = jQuery.parseJSON(response);
   } catch (e) { // response is html document or plain text
    response = doc.body.innerHTML;
   }
  } else {
   // response is a xml document
   response = doc;
  }

  callback(response);
 });
}

③、富文本数据展示

$('#editor').html($.base64.atob(description, true));

通过base64对数据库中保存的html代码进行解码。

④、wysiwyg组件

关于wysiwyg组件封装代码,我已上传到CSDN的代码库,可详细参照。

四、普通html转码做法

function html_encode(str) {
 var s = "";
 if (str.length == 0)
  return "";
 s = str.replace(/&/g, ">");
 s = s.replace(/</g, "<");
 s = s.replace(/>/g, ">");
 s = s.replace(/ /g, " ");
 s = s.replace(/\'/g, "'");
 s = s.replace(/\"/g, """);
 s = s.replace(/\n/g, "<br>");
 return s;
}

function html_decode(str) {
 var s = "";
 if (str.length == 0)
  return "";
 s = str.replace(/>/g, "&");
 s = s.replace(/</g, "<");
 s = s.replace(/>/g, ">");
 s = s.replace(/ /g, " ");
 s = s.replace(/'/g, "\'");
 s = s.replace(/"/g, "\"");
 s = s.replace(/<br>/g, "\n");
 return s;
}

一般情况下,使用上面两个方法对html数据进行编码和解码,但是对于图片的保存却无能为力。

如果大家还想深入学习,可以点击这里进行学习,再为大家附3个精彩的专题:

以上就是本文的全部内容,希望对大家了解富文本组件wysiwyg有所帮助。

Javascript 相关文章推荐
jquery学习笔记 用jquery实现无刷新登录
Aug 08 Javascript
JS trim去空格的最佳实践
Oct 30 Javascript
2014 年最热门的21款JavaScript框架推荐
Dec 25 Javascript
让JavaScript中setTimeout支持链式操作的方法
Jun 19 Javascript
JQuery遍历元素的后代和同胞实现方法
Sep 18 Javascript
AngularJS监听路由变化的方法
Mar 07 Javascript
vue项目中跳转到外部链接的实例讲解
Sep 20 Javascript
JavaScript中引用vs复制示例详析
Dec 06 Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 jQuery
vue实现移动端H5数字键盘组件使用详解
Aug 25 Javascript
TypeScript 运行时类型检查补充工具
Sep 28 Javascript
如何让一个json文件显示在表格里【实现代码】
May 09 #Javascript
JavaScript 函数的执行过程
May 09 #Javascript
jQuery绑定事件-多种实现方式总结
May 09 #Javascript
js原型链与继承解析(初体验)
May 09 #Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
May 09 #Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 #Javascript
JavaScript中的prototype原型学习指南
May 09 #Javascript
You might like
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
php中使用url传递数组的方法
2015/02/11 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP编写简单的App接口
2016/08/28 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
Python批量转换文件编码格式
2015/05/17 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python实现简单flappy bird
2018/12/24 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
零基础学python应该从哪里入手
2020/08/11 Python
python实现单机五子棋
2020/08/28 Python
Html5移动端获奖无缝滚动动画实现示例
2018/06/25 HTML / CSS
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
材料加工硕士生求职信
2013/10/10 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
房屋委托书范本
2014/04/04 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
2016国庆促销广告语
2016/01/28 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技