ueditor 特殊符号转义

2019-01-08 14:35:50

几个月前,就有同事跟我反馈,说磨途歌的留言板有问题。当时看了一下,她用的是谷歌浏览器,确实打不出中文,才按下一个字母,英文字母就从输入法的输入框中直接跳出来了,更换火狐浏览器就没这个问题。很奇怪的是,在我电脑上的火狐浏览器跟谷歌浏览器都没有问题,一开始还以为是她电脑的问题,就没在意了。

最近在家里用谷歌浏览器写博客,也出现了上述的情况,才开始重视起来。检查了一遍,初步锁定问题出在ueditor编辑器本身,于是上ueditor官网看看有没有更新或者说明。果然,ueditor已经更新了好几个版本了,磨途歌用的是1.2.5.0版本,最新版本为1.2.6.1。

浏览了一下更新日志,发现ueditor官网确实提到有这个bug,并且已经修复了,小激动,看来选择有大公司背景的开源软件,是明智的。

因为磨途歌使用的ueditor编辑器做过调整,所以新版本的ueditor还得再修改一下才能用。

在调试阶段,磨途歌发现新版本的ueditor编辑器有个问题,转义单引号(')出错了!

例如下边的内容,用旧版本的js文件可以正常显示

1
2
<?php
$blog 'mo2g.com';

新版本的js显示如下

1
2
<?php
$blog = &#039;mo2g.com&#039;;

经过分析,很快就找到问题的根源,接下来就给大家讲解。

在html里,很多符号都有其他的表示方法,给大家列出常用的符号:

显示结果
html代码
简单描述

&nbsp;空格
&&amp;指明有字符存在(特殊字符)的默认符号
"&quot;双引号
'&#039;单引号
<&lt;小于号
>&gt;大于号
®&reg;注册标志
©&copy;版权标志
&trade;商标标志

问题就出在新版本的ueditor把单引号(')转义成了&#39;,完全忽略了&#039;也是单引号(')的事实,至少PHP还是把单引号(')转义成了&#039;的。

这个问题也很容易修复,打开ueditor.all.js文件,往里边添加一些代码就好了。找到398行,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    /**
     * 将str中的html符号转义,默认将转义''&<">''四个字符,可自定义reg来确定需要转义的字符
     * @name unhtml
     * @grammar UE.utils.unhtml(str);  => String
     * @grammar UE.utils.unhtml(str,reg)  => String
     * @example
     * var html = '<body>You say:"你好!Baidu & UEditor!"</body>';
     * UE.utils.unhtml(html);   ==>  &lt;body&gt;You say:&quot;你好!Baidu &amp; UEditor!&quot;&lt;/body&gt;
     * UE.utils.unhtml(html,/[<>]/g)  ==>  &lt;body&gt;You say:"你好!Baidu & UEditor!"&lt;/body&gt;
     */
    unhtml:function (str, reg) {
            return str ? str.replace(reg || /[&<">'](?:(amp|lt|quot|gt|#39|nbsp);)?/g, function (a, b) {
                if (b) {
                    return a;
                } else {
                    return {
                        '<':'&lt;',
                        '&':'&amp;',
                        '"':'&quot;',
                        '>':'&gt;',
                        "'":'&#39;'
                    }[a]
                }
     
            }) : '';
        },

把其中的(?:(amp|lt|quot|gt|#39|nbsp);)改成(?:(amp|lt|quot|gt|#39|#039|nbsp);),问题解决。

  • 2019-11-09 19:16:35

    java标记过期方法

    java注解:@Deprecated(不建议使用的,废弃的);@SuppressWarnings(忽略警告,达到抑制编译器产生警告的目的)

  • 2019-11-12 02:56:39

    使用.htaccess重定向后无法显示图片,CSS失效,该如何处理

    现在我需要把这个域名泛解析到blog目录(*.mydomain.org),同时保持另外两个目录的解析不变。尝试对最后一段作以下修改后(前面的内容不变),出现问题:另两个目录中的网站内的图片无法显示,CSS全部失效。

  • 2019-11-14 11:21:34

    vue中的this指向问题

    ※ 对于普通函数(包括匿名函数),this指的是直接的调用者,在非严格模式下,如果没有直接调用者,this指的是window。showMessage1()里setTimeout使用了匿名函数,this指向 window。 ※ 箭头函数是没有自己的this,在它内部使用的this是由它定义的宿主对象决定。showMessage2()里定义的箭头函数宿主对象为vue实例,所以它里面使用的this指向vue实例。

  • 2019-11-18 23:18:49

    spring boot中读取配置信息一

    首先我们都知道一个常识,那就是每个人都有自己的年龄,比如我们现在的业务需求是查询所有年龄大于20的人的相关信息,如果我们选择通过配置文件来配置这个值为20的常量的话,我们该如何配置和如何从配置文件中获取这个值呢?,application.yml的内容如下(注意 “age:“ 和 “20“ 之间需要一个空格,yml的语法 ):