最近在做一个博客,后台用的富文本编辑器,编辑完成后以html形式获取代码,获取到的html代码中部分特殊字符没有转义导致数据库插入语句报错。
富文本编辑器中内容:(代码里用的英文单引号)
直接获取到的html代码:(未经任何处理)
<p style="text-align: center;">
<span style="font-weight: bold;">标题</span>
</p>
<pre>
<code>
<div style="text-align: left;">
function(){
</div>
<div style="text-align: left;">var a = 1;</div>
<div style="text-align: left;">}</div>
<div style="text-align: left;">
console.log('你好','<世界>');
</div>
</code>
</pre>
<pre>
<p><br></p>
</pre>
报错
该富文本对尖括号做了自动转义,但由于单引号未转义导致数据库insert语句报错,需要手动转义,这里用的js正则表达式模式匹配。
//ES6变量解构赋值,content为前台拿到的html代码(字符串形式)
let { tag,author,title,des,date,content } = req.body;
//解决:数据库插入时 单引号导致的SQL语句错误
var contents = content.replace(/\'/g,"'");
总结:
1.replace方法是js提供的一个针对String的模式匹配专用方法
2.代码为主的博客类系统可能markdown编辑器使用的比较多
3.以Unicode编码形式对html代码进行手动转义,当再次传到前端显示时只需添加文档格式为utf-8即可,无需解码