最近项目需要,需要从富文本编辑器获取html内容组装json,然后还要
把组装后的json对象利用json2转成json字符串,数据放入编辑器提交,由于兼容ie8以上浏览器。所以搞了好久的特殊字符转义,经常出错。我们一般想到的解决办法就是转义:
/*3.用正则表达式实现html转码*/ function htmlEncodeByRegExp(str){ var s = ""; if(str.length == 0) return ""; s = str.replace(/&/g,"&"); s = s.replace(/</g,"<"); s = s.replace(/>/g,">"); s = s.replace(/ /g,""); s = s.replace(/\'/g,"'"); s = s.replace(/\"/g,"""); s = s.replace(/\n"/g,""); s = s.replace(/\r"/g,""); return s; } /*4.用正则表达式实现html解码*/ function htmlDecodeByRegExp (str){ var s = ""; if(str.length == 0) return ""; s = str.replace(/&/g,"&"); s = s.replace(/</g,"<"); s = s.replace(/>/g,">"); s = s.replace(/ /g," "); s = s.replace(/'/g,"\'"); s = s.replace(/"/g,"\""); return s; }
json字符串本身的引号 和 html里面的引号,在转码后没法区分哪些是数据格式,哪些属于从编辑器获取的Html里面的。 后来想到一种解决办法,就是对从富文本编辑器里面的内容进行base64编码,展示的时候再解码,就完全屏蔽掉了所有的特殊字符。 因此采用了jquery.base64.js.具体使用方法是:
编码
dec.val($.base64.btoa(this.value)); // also possible: // dec.val( $.base64('encode', this.value) ); // dec.val( $.base64.encode(this.value) );
解码
// note: you can pass a third parameter to use the utf8 en- / decode option enc.val($.base64.atob(this.value, true)); // also possible: // dec.val( $.base64('decode', this.value) ); // dec.val( $.base64.decode(this.value) );