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);),问题解决。

  • 2020-01-08 22:03:07

    修改MAC系统下默认PHP版本

    今天在使用mac时遇到了一个问题,因为需要composer拉取laravel5.6,但是提示我php版本过低,但是我本人使用的是集成环境MAMP,已经切换了php7.2的版本,这个为什么没有生效呢?经检查是因为composer检测得是mac下环境变量生效的php版本

  • 2020-01-08 23:37:08

    laravel通过图片流返回图片

    我用laravel的字母头像生成框架Laravolt\Avatar生成的base64头像,但我想做个通用但,直接返回图片,我还是根据以往但经验 改写header但返回值为图片返回值,结果返回失败,一堆乱吗,不知道为啥。 后来用了laravel自带但返回图片但方法,结果ok。记录下

  • 2020-01-08 23:45:06

    laravel response 对象一些常用功能点

    通常,我们并不只是从路由动作简单返回字符串和数组,大多数情况下,都会返回一个完整的 Illuminate\Http\Response 实例或 视图。

  • 2020-01-08 23:49:13

    laravel 存储base64格式图片

    一、总结 一句话总结: 二、laravel存储64位图片实例 三、laravel 存储前端上传base64图片 四、php将base64字符串转换为图片

  • 2020-01-09 01:24:28

    mac安装ImageMagick与PHP扩展Imagick

    mac安装ImageMagick和php7.2扩展Imagick,从网上搜索教程,感觉好少,有的教程看起来也很麻烦,不过安装起来,没想到竟然如此简单。不非纯灰之力。

  • 2020-01-09 18:49:17

    pecl安装卸载模块,如何自动配置php.ini

    利用pecl安装php模块,可能需要手工配置php.ini,以加载或禁止相关模块。那么pecl install是不是可以自动配置php.ini呢?答案是肯定的。在pecl isntall的提示信息中,苏南大叔找到了下面的类似提示信息:configuration option "php_ini" is not set to php.ini location。这个设置点,就是本文的关键所在。设置好"php_ini"之后,pecl就可以自动修改php.ini中的extension=了。