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 相关文章推荐
记录几个javascript有关的小细节
Apr 02 Javascript
JavaScript脚本语言在网页中的简单应用
May 13 Javascript
最佳的addEvent事件绑定是怎样诞生的
Oct 24 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
Jun 15 Javascript
javascript检查浏览器是否已经启用XX功能
Jul 10 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
Apr 29 Javascript
Bootstrap选项卡与Masonry插件的完美结合
Jul 06 Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
Oct 14 jQuery
深入理解Angularjs 脏值检测
Oct 12 Javascript
Nuxt.js 数据双向绑定的实现
Feb 17 Javascript
微信小程序与webview交互实现支付功能
Jun 07 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
深入array multisort排序原理的详解
2013/06/18 PHP
XAMPP安装与使用方法详细解析
2013/11/27 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
JS实现滑动插件
2020/01/15 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
使用Python生成XML的方法实例
2017/03/21 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
python实现BP神经网络回归预测模型
2019/08/09 Python
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
《匆匆》教学反思
2014/02/22 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
高中数学教学反思范文
2016/02/18 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript