当前位置:首页 » 《关注互联网》 » 正文

UEditor富文本编辑器

6 人参与  2024年03月24日 11:45  分类 : 《关注互联网》  评论

点击全文阅读


什么是UEditor

UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量、可定制、用户
体验优秀等特点。开源基于BSD协议,所有源代码在协议允许范围内可自由修改和使用。百度UEditor
的推出,可以帮助不少网站开发者在开发富文本编辑器所遇到的难题,节约开发者因开发富文本编辑器
所需要的大量时间,有效降低了企业的开发成本。
官网:官网
教程文档地址:教程文档
API文档地址:api

为什么使用UEditor?

用于替换textarea,textarea是纯文本编辑器,样式比较简陋。使用富文本编辑器,样式丰富,所见即所得。
UEditor本质上是一个html。

使用-demo

加载两个js加载编辑器的容器(文本编辑器默认值)实例化编辑器
<!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8"><title>ueditor demo</title></head><body><!-- 加载编辑器的容器 --><script id="container" name="content" type="text/plain">这里写你的初始化内容</script><!-- 配置文件 --><script type="text/javascript" src="ueditor.config.js"></script><!-- 编辑器源码文件 --><script type="text/javascript" src="ueditor.all.js"></script><!-- 实例化编辑器 --><script type="text/javascript">var ue = UE.getEditor('container');</script></body></html>

UEditor 和 转义

使用UEditor必须要转义,这是为什么?
为了安全起见,防止数据库操作失败。
安全起见:必须转义,防止恶意脚本被执行。当标签传递给浏览器的时候,浏览器把他们解析为标签,就会被执行。在一个富文本编辑器中,当用户输入一个<script>标签时,如果这个标签不被转义,那么浏览器就会将它解析为一个脚本标签,并且执行其中的 JavaScript 代码。这种情况下,如果攻击者能够注入恶意脚本,那么页面就有可能被攻击者控制。当标签被转义后,当需要被解析的时候,会和普通文本一样呈现在页面中,不会被浏览器解析执行。如果想要动态效果可以通过js代码,如jquery,react,vue等。
防止数据库操作失败,如双引号或者单引号如果没有被转义可能会造成sql注入的问题。

public void testHtml(){String html = HtmlUtils.htmlEscape("<p><span>测试html文本转义与反转义<span><p>","UTF-8");System.out.println(html);System.out.println(HtmlUtils.htmlUnescape(html));}

应用

三大步骤

1、引入配置文件
2、提供容器,将插件放入容器中
3、加载容器,调用工具函数

前端:

引入配置文件

<!-- 百度 ueditor --><script type="text/javascript" charset="utf-8" src="${ctx}/plugins/Ueditor/ueditor.config.js"></script><script type="text/javascript" charset="utf-8" src="${ctx}/plugins/Ueditor/ueditor.all.js"></script><script type="text/javascript" charset="utf-8" src="${ctx}/plugins/Ueditor/lang/zh-cn/zh-cn.js"></script>

提供容器,将插件放入容器中

提供一个文本域,将富文本编辑器放到文本域中。

<tr><td>商品详情描述:</td><td width="85%">        <textarea rows="6" cols="80" class="span12 ckeditor" id="goods_content"  name="goodsContent" title=""></textarea><span id="err_goods_content" style="color:#F00; display:none;"></span></td></tr>

加载容器,调用工具函数

<!--以下是在线编辑器 代码 --><script type="text/javascript">/*    * 在线编辑器相 关配置 js    *  参考 地址 http://fex.baidu.com/ueditor/    */window.UEDITOR_Admin_URL = "${ctx}/plugins/Ueditor/";var URL_upload = "/index/Admin/Ueditor/imageUp/savepath/goods";var URL_fileUp = "/index/Admin/Ueditor/fileUp/savepath/article";var URL_scrawlUp = "/index/Admin/Ueditor/scrawlUp/savepath/article";var URL_getRemoteImage = "/index/Admin/Ueditor/getRemoteImage/savepath/article";var URL_imageManager = "/index/Admin/Ueditor/imageManager/savepath/article";var URL_imageUp = "/index/Admin/Ueditor/imageUp/savepath/article";var URL_getMovie = "/index/Admin/Ueditor/getMovie/savepath/article";var URL_home = "";</script><script type="text/javascript">var editor;$(function () {//具体参数配置在  editor_config.js  中var options = {zIndex: 999,initialFrameWidth: "95%", //初化宽度initialFrameHeight: 400, //初化高度focus: false, //初始化时,是否让编辑器获得焦点true或falsemaximumWords: 99999,removeFormatAttributes:'class,style,lang,width,height,align,hspace,valign', //允许的最大字符数 'fullscreen',pasteplain: false, //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴autoHeightEnabled: true/*   autotypeset: {                   mergeEmptyline: true,        //合并空行                   removeClass: true,           //去掉冗余的class                   removeEmptyline: false,      //去掉空行                   textAlign: "left",           //段落的排版方式,可以是 left,right,center,justify 去掉这个属性表示不执行排版                   imageBlockLine: 'center',    //图片的浮动方式,独占一行剧中,左右浮动,默认: center,left,right,none 去掉这个属性表示不执行排版                   pasteFilter: false,          //根据规则过滤没事粘贴进来的内容                   clearFontSize: false,        //去掉所有的内嵌字号,使用编辑器默认的字号                   clearFontFamily: false,      //去掉所有的内嵌字体,使用编辑器默认的字体                   removeEmptyNode: false,      //去掉空节点                                                //可以去掉的标签                   removeTagNames: {"font": 1},                   indent: false,               // 行首缩进                   indentValue: '0em'           //行首缩进的大小               }*/,toolbars: [['fullscreen', 'source', '|', 'undo', 'redo','|', 'bold', 'italic', 'underline', 'fontborder','strikethrough', 'superscript', 'subscript','removeformat', 'formatmatch', 'autotypeset','blockquote', 'pasteplain', '|', 'forecolor','backcolor', 'insertorderedlist','insertunorderedlist', 'selectall', 'cleardoc', '|','rowspacingtop', 'rowspacingbottom', 'lineheight', '|','customstyle', 'paragraph', 'fontfamily', 'fontsize','|', 'directionalityltr', 'directionalityrtl','indent', '|', 'justifyleft', 'justifycenter','justifyright', 'justifyjustify', '|', 'touppercase','tolowercase', '|', 'link', 'unlink', 'anchor', '|','imagenone', 'imageleft', 'imageright', 'imagecenter','|', 'insertimage', 'emotion', 'insertvideo','attachment', 'map', 'gmap', 'insertframe','insertcode', 'webapp', 'pagebreak', 'template','background', '|', 'horizontal', 'date', 'time','spechars', 'wordimage', '|','inserttable', 'deletetable','insertparagraphbeforetable', 'insertrow', 'deleterow','insertcol', 'deletecol', 'mergecells', 'mergeright','mergedown', 'splittocells', 'splittorows','splittocols', '|', 'print', 'preview', 'searchreplace']]};editor = new UE.ui.Editor(options);editor.render("goods_content");  //  指定 textarea 的  id 为 goods_content,将文本编辑器的内容放到文本框中});</script><!--以上是在线编辑器 代码  end-->

后端:

前端页面写好商品描述详情之后,点击保存按钮,发送异步请求到Controller中。对接收过来的goods的商品详情描述内容进行转义。

Controller

@RequestMapping("/save")    @ResponseBody   public BaseResult goodsSave(Goods goods){        BaseResult error = BaseResult.error();        //如果商品详情不为空,则转义UEditor文本编辑器        if(!StringUtils.isEmpty(goods.getGoodsContent())){            String s = HtmlUtils.htmlEscape(goods.getGoodsContent(), "utf-8");            goods.setGoodsContent(s);        }        System.out.println("保存商品");        if(goods.getGoodsId()!=null){            error.setMessage("重复保存!保存失败!");            return error;        }        int result = goodsService.saveGoods(goods);        System.out.println("商品id"+goods.getGoodsId());        if(result>0){            BaseResult success = BaseResult.success();            success.setMessage(String.valueOf(goods.getGoodsId()));            return success;        }        error.setMessage("系统繁忙,请联系管理员!");        return error;    }

点击全文阅读


本文链接:http://zhangshiyu.com/post/84737.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1