ueditor不兼容旧版本,导致单引号解析错误的解决办法
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/56/ ]
几个月前,就有同事跟我反馈,说磨途歌的留言板有问题.当时看了一下,她用的是谷歌浏览器,确实打不出中文,才按下一个字母,英文字母就从输入法的输入框中直接跳出来了,更换火狐浏览器就没这个问题.很奇怪的是,在我电脑上的火狐浏览器跟谷歌浏览器都没有问题,一开始还以为是她电脑的问题,就没在意了.
几个月前,就有同事跟我反馈,说磨途歌的留言板有问题。当时看了一下,她用的是谷歌浏览器,确实打不出中文,才按下一个字母,英文字母就从输入法的输入框中直接跳出来了,更换火狐浏览器就没这个问题。很奇怪的是,在我电脑上的火狐浏览器跟谷歌浏览器都没有问题,一开始还以为是她电脑的问题,就没在意了。
最近在家里用谷歌浏览器写博客,也出现了上述的情况,才开始重视起来。检查了一遍,初步锁定问题出在ueditor编辑器本身,于是上ueditor官网看看有没有更新或者说明。果然,ueditor已经更新了好几个版本了,磨途歌用的是1.2.5.0版本,最新版本为1.2.6.1。
浏览了一下更新日志,发现ueditor官网确实提到有这个bug,并且已经修复了,小激动,看来选择有大公司背景的开源软件,是明智的。
因为磨途歌使用的ueditor编辑器做过调整,所以新版本的ueditor还得再修改一下才能用。
在调试阶段,磨途歌发现新版本的ueditor编辑器有个问题,转义单引号(')出错了!
例如下边的内容,用旧版本的js文件可以正常显示
<?php $blog = 'mo2g.com';
新版本的js显示如下
<?php $blog = 'mo2g.com';
经过分析,很快就找到问题的根源,接下来就给大家讲解。
在html里,很多符号都有其他的表示方法,给大家列出常用的符号:
| 显示结果 | html代码 | 简单描述 |
| | 空格 | |
| & | & | 指明有字符存在(特殊字符)的默认符号 |
| " | " | 双引号 |
| ' | ' | 单引号 |
| < | < | 小于号 |
| > | > | 大于号 |
| ® | ® | 注册标志 |
| © | © | 版权标志 |
| ™ | ™ | 商标标志 |
问题就出在新版本的ueditor把单引号(')转义成了',完全忽略了'也是单引号(')的事实,至少PHP还是把单引号(')转义成了'的。
这个问题也很容易修复,打开ueditor.all.js文件,往里边添加一些代码就好了。找到398行,代码如下:
/**
* 将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); ==> <body>You say:"你好!Baidu & UEditor!"</body>
* UE.utils.unhtml(html,/[<>]/g) ==> <body>You say:"你好!Baidu & UEditor!"</body>
*/
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 {
'<':'<',
'&':'&',
'"':'"',
'>':'>',
"'":'''
}[a]
}
}) : '';
},把其中的(?:(amp|lt|quot|gt|#39|nbsp);)改成(?:(amp|lt|quot|gt|#39|#039|nbsp);),问题解决。
总体感觉ueditor还是很好用的,先这么用着,等遇到问题再说,毕竟百度已经免费给我们维护了,磨途歌还能说什么?

我来说两句: