PHP html富文本转Json错误

背景

商城的详情页面使用百度的富文本,存储在mysql中。
前端使用vue,所以在去取出来和其他数据一起转为json数据返回给前端的时候发生错误,json格式错误。打印发现是富文本里面有图片或者说是有 “” 双引号的原因,在网上找了一些方法说需要转义再存。后来觉得这种方法不是很适合,所以换了一种方法,使用 Base64 的方式

转为json
  • 转为json前先把富文本的内容base64转化一下,这样json格式就不会出错

  • 在前端页面解析base64

  • 先引用base64加密解密文件

/*
 * [hi-base64]{@link https://github.com/emn178/hi-base64}
 *
 * @version 0.2.1
 * @author Chen, Yi-Cyuan [emn178@gmail.com]
 * @copyright Chen, Yi-Cyuan 2014-2017
 * @license MIT
 */
/*jslint bitwise: true */
(function () {
    'use strict';

    var root = typeof window === 'object' ? window : {};
    var NODE_JS = !root.HI_BASE64_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
    if (NODE_JS) {
        root = global;
    }
    var COMMON_JS = !root.HI_BASE64_NO_COMMON_JS && typeof module === 'object' && module.exports;
    var AMD = typeof define === 'function' && define.amd;
    var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
    var BASE64_DECODE_CHAR = {
        'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8,
        'J': 9, 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16,
        'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24,
        'Z': 25, 'a': 26, 'b': 27, 'c': 28, 'd': 29, 'e': 30, 'f': 31, 'g': 32,
        'h': 33, 'i': 34, 'j': 35, 'k': 36, 'l': 37, 'm': 38, 'n': 39, 'o': 40,
        'p': 41, 'q': 42, 'r': 43, 's': 44, 't': 45, 'u': 46, 'v': 47, 'w': 48,
        'x': 49, 'y': 50, 'z': 51, '0': 52, '1': 53, '2': 54, '3': 55, '4': 56,
        '5': 57, '6': 58, '7': 59, '8': 60, '9': 61, '+': 62, '/': 63, '-': 62,
        '_': 63
    };

    var utf8ToBytes = function (str) {
        var bytes = [];
        for (var i = 0; i < str.length; i++) {
            var c = str.charCodeAt(i);
            if (c < 0x80) {
                bytes[bytes.length] = c;
            } else if (c < 0x800) {
                bytes[bytes.length] = 0xc0 | (c >> 6);
                bytes[bytes.length] = 0x80 | (c & 0x3f);
            } else if (c < 0xd800 || c >= 0xe000) {
                bytes[bytes.length] = 0xe0 | (c >> 12);
                bytes[bytes.length] = 0x80 | ((c >> 6) & 0x3f);
                bytes[bytes.length] = 0x80 | (c & 0x3f);
            } else {
                c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));
                bytes[bytes.length] = 0xf0 | (c >> 18);
                bytes[bytes.length] = 0x80 | ((c >> 12) & 0x3f);
                bytes[bytes.length] = 0x80 | ((c >> 6) & 0x3f);
                bytes[bytes.length] = 0x80 | (c & 0x3f);
            }
        }
        return bytes;
    };

    var decodeAsBytes = function (base64Str) {
        var v1, v2, v3, v4, bytes = [], index = 0, length = base64Str.length;
        if (base64Str.charAt(length - 2) === '=') {
            length -= 2;
        } else if (base64Str.charAt(length - 1) === '=') {
            length -= 1;
        }

        // 4 char to 3 bytes
        for (var i = 0, count = length >> 2 << 2; i < count;) {
            v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            v4 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            bytes[index++] = (v1 << 2 | v2 >>> 4) & 255;
            bytes[index++] = (v2 << 4 | v3 >>> 2) & 255;
            bytes[index++] = (v3 << 6 | v4) & 255;
        }

        // remain bytes
        var remain = length - count;
        if (remain === 2) {
            v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            bytes[index++] = (v1 << 2 | v2 >>> 4) & 255;
        } else if (remain === 3) {
            v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
            bytes[index++] = (v1 << 2 | v2 >>> 4) & 255;
            bytes[index++] = (v2 << 4 | v3 >>> 2) & 255;
        }
        return bytes;
    };

    var encodeFromBytes = function (bytes) {
        var v1, v2, v3, base64Str = '', length = bytes.length;
        for (var i = 0, count = parseInt(length / 3) * 3; i < count;) {
            v1 = bytes[i++];
            v2 = bytes[i++];
            v3 = bytes[i++];
            base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
                BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
                BASE64_ENCODE_CHAR[v3 & 63];
        }

        // remain char
        var remain = length - count;
        if (remain === 1) {
            v1 = bytes[i];
            base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
                '==';
        } else if (remain === 2) {
            v1 = bytes[i++];
            v2 = bytes[i];
            base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
                BASE64_ENCODE_CHAR[(v2 << 2) & 63] +
                '=';
        }
        return base64Str;
    };

    var btoa = root.btoa, atob = root.atob, utf8Base64Encode, utf8Base64Decode;
    if (NODE_JS) {
        var Buffer = require('buffer').Buffer;
        btoa = function (str) {
            return new Buffer(str, 'ascii').toString('base64');
        };

        utf8Base64Encode = function (str) {
            return new Buffer(str).toString('base64');
        };

        encodeFromBytes = utf8Base64Encode;

        atob = function (base64Str) {
            return new Buffer(base64Str, 'base64').toString('ascii');
        };

        utf8Base64Decode = function (base64Str) {
            return new Buffer(base64Str, 'base64').toString();
        };
    } else if (!btoa) {
        btoa = function (str) {
            var v1, v2, v3, base64Str = '', length = str.length;
            for (var i = 0, count = parseInt(length / 3) * 3; i < count;) {
                v1 = str.charCodeAt(i++);
                v2 = str.charCodeAt(i++);
                v3 = str.charCodeAt(i++);
                base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                    BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
                    BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
                    BASE64_ENCODE_CHAR[v3 & 63];
            }

            // remain char
            var remain = length - count;
            if (remain === 1) {
                v1 = str.charCodeAt(i);
                base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                    BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
                    '==';
            } else if (remain === 2) {
                v1 = str.charCodeAt(i++);
                v2 = str.charCodeAt(i);
                base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                    BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
                    BASE64_ENCODE_CHAR[(v2 << 2) & 63] +
                    '=';
            }
            return base64Str;
        };

        utf8Base64Encode = function (str) {
            var v1, v2, v3, base64Str = '', bytes = utf8ToBytes(str), length = bytes.length;
            for (var i = 0, count = parseInt(length / 3) * 3; i < count;) {
                v1 = bytes[i++];
                v2 = bytes[i++];
                v3 = bytes[i++];
                base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                    BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
                    BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
                    BASE64_ENCODE_CHAR[v3 & 63];
            }

            // remain char
            var remain = length - count;
            if (remain === 1) {
                v1 = bytes[i];
                base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                    BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
                    '==';
            } else if (remain === 2) {
                v1 = bytes[i++];
                v2 = bytes[i];
                base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
                    BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
                    BASE64_ENCODE_CHAR[(v2 << 2) & 63] +
                    '=';
            }
            return base64Str;
        };

        atob = function (base64Str) {
            var v1, v2, v3, v4, str = '', length = base64Str.length;
            if (base64Str.charAt(length - 2) === '=') {
                length -= 2;
            } else if (base64Str.charAt(length - 1) === '=') {
                length -= 1;
            }

            // 4 char to 3 bytes
            for (var i = 0, count = length >> 2 << 2; i < count;) {
                v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                v4 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255) +
                    String.fromCharCode((v2 << 4 | v3 >>> 2) & 255) +
                    String.fromCharCode((v3 << 6 | v4) & 255);
            }

            // remain bytes
            var remain = length - count;
            if (remain === 2) {
                v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255);
            } else if (remain === 3) {
                v1 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                v2 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                v3 = BASE64_DECODE_CHAR[base64Str.charAt(i++)];
                str += String.fromCharCode((v1 << 2 | v2 >>> 4) & 255) +
                    String.fromCharCode((v2 << 4 | v3 >>> 2) & 255);
            }
            return str;
        };

        utf8Base64Decode = function (base64Str) {
            var str = '', bytes = decodeAsBytes(base64Str), length = bytes.length;
            var i = 0, followingChars = 0, b, c;
            while (i < length) {
                b = bytes[i++];
                if (b <= 0x7F) {
                    str += String.fromCharCode(b);
                    continue;
                } else if (b > 0xBF && b <= 0xDF) {
                    c = b & 0x1F;
                    followingChars = 1;
                } else if (b <= 0xEF) {
                    c = b & 0x0F;
                    followingChars = 2;
                } else if (b <= 0xF7) {
                    c = b & 0x07;
                    followingChars = 3;
                } else {
                    throw 'not a UTF-8 string';
                }

                for (var j = 0; j < followingChars; ++j) {
                    b = bytes[i++];
                    if (b < 0x80 || b > 0xBF) {
                        throw 'not a UTF-8 string';
                    }
                    c <<= 6;
                    c += b & 0x3F;
                }
                if (c >= 0xD800 && c <= 0xDFFF) {
                    throw 'not a UTF-8 string';
                }
                if (c > 0x10FFFF) {
                    throw 'not a UTF-8 string';
                }

                if (c <= 0xFFFF) {
                    str += String.fromCharCode(c);
                } else {
                    c -= 0x10000;
                    str += String.fromCharCode((c >> 10) + 0xD800);
                    str += String.fromCharCode((c & 0x3FF) + 0xDC00);
                }
            }
            return str;
        };
    } else {
        utf8Base64Encode = function (str) {
            var result = '';
            for (var i = 0; i < str.length; i++) {
                var charcode = str.charCodeAt(i);
                if (charcode < 0x80) {
                    result += String.fromCharCode(charcode);
                } else if (charcode < 0x800) {
                    result += String.fromCharCode(0xc0 | (charcode >> 6)) +
                        String.fromCharCode(0x80 | (charcode & 0x3f));
                } else if (charcode < 0xd800 || charcode >= 0xe000) {
                    result += String.fromCharCode(0xe0 | (charcode >> 12)) +
                        String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)) +
                        String.fromCharCode(0x80 | (charcode & 0x3f));
                } else {
                    charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));
                    result += String.fromCharCode(0xf0 | (charcode >> 18)) +
                        String.fromCharCode(0x80 | ((charcode >> 12) & 0x3f)) +
                        String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)) +
                        String.fromCharCode(0x80 | (charcode & 0x3f));
                }
            }
            return btoa(result);
        };

        utf8Base64Decode = function (base64Str) {
            var tmpStr = atob(base64Str.trim('=').replace(/-/g, '+').replace(/_/g, '/'));
            if (!/[^\x00-\x7F]/.test(tmpStr)) {
                return tmpStr;
            }
            var str = '', i = 0, length = tmpStr.length, followingChars = 0, b, c;
            while (i < length) {
                b = tmpStr.charCodeAt(i++);
                if (b <= 0x7F) {
                    str += String.fromCharCode(b);
                    continue;
                } else if (b > 0xBF && b <= 0xDF) {
                    c = b & 0x1F;
                    followingChars = 1;
                } else if (b <= 0xEF) {
                    c = b & 0x0F;
                    followingChars = 2;
                } else if (b <= 0xF7) {
                    c = b & 0x07;
                    followingChars = 3;
                } else {
                    throw 'not a UTF-8 string';
                }

                for (var j = 0; j < followingChars; ++j) {
                    b = tmpStr.charCodeAt(i++);
                    if (b < 0x80 || b > 0xBF) {
                        throw 'not a UTF-8 string';
                    }
                    c <<= 6;
                    c += b & 0x3F;
                }
                if (c >= 0xD800 && c <= 0xDFFF) {
                    throw 'not a UTF-8 string';
                }
                if (c > 0x10FFFF) {
                    throw 'not a UTF-8 string';
                }

                if (c <= 0xFFFF) {
                    str += String.fromCharCode(c);
                } else {
                    c -= 0x10000;
                    str += String.fromCharCode((c >> 10) + 0xD800);
                    str += String.fromCharCode((c & 0x3FF) + 0xDC00);
                }
            }
            return str;
        };
    }

    var encode = function (str, asciiOnly) {
        var notString = typeof(str) != 'string';
        if (notString && str.constructor === root.ArrayBuffer) {
            str = new Uint8Array(str);
        }
        if (notString) {
            return encodeFromBytes(str);
        } else {
            if (!asciiOnly && /[^\x00-\x7F]/.test(str)) {
                return utf8Base64Encode(str);
            } else {
                return btoa(str);
            }
        }
    };

    var decode = function (base64Str, asciiOnly) {
        return asciiOnly ? atob(base64Str) : utf8Base64Decode(base64Str);
    };

    var exports = {
        encode: encode,
        decode: decode,
        atob: atob,
        btoa: btoa
    };
    decode.bytes = decodeAsBytes;
    decode.string = decode;

    if (COMMON_JS) {
        module.exports = exports;
    } else {
        root.base64 = exports;
        if(AMD) {
            define(function() {
                return exports;
            });
        }
    }
})();
  • 使用base解析
  base.decode(json.base64text);

大家觉得有帮助请点个赞

个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,937评论 3 118
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,024评论 8 265
  • 浅唱·岁月 小诺在纸上写下七谨年的“爱有最朴素的生活和最遥远的梦想,即使明日天寒地冻,路远马亡。”的时候,窗外的木...
    咚_阅读 268评论 0 0
  • 自律,是人生最尊贵的标配 2017-05-13快乐人生 唯有自律的人,才会得到岁月的厚爱。 《高效能人士的七个习惯...
    持续收入倡导者阅读 278评论 0 0