php mysql富文本格式_PHP html富文本转Json错误

背景商城的详情页面使用百度的富文本,存储在mysql中。

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

转为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 

bytes[bytes.length] = c;

} else if (c 

bytes[bytes.length] = 0xc0 | (c >> 6);

bytes[bytes.length] = 0x80 | (c & 0x3f);

} else if (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) <

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 <

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 <>> 4) & 255;

bytes[index++] = (v2 <>> 2) & 255;

bytes[index++] = (v3 <

}        // 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 <>> 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 <>> 4) & 255;

bytes[index++] = (v2 <>> 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 

v1 = bytes[i++];

v2 = bytes[i++];

v3 = bytes[i++];

base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +

BASE64_ENCODE_CHAR[(v1 <>> 4) & 63] +

BASE64_ENCODE_CHAR[(v2 <>> 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 <

} else if (remain === 2) {

v1 = bytes[i++];

v2 = bytes[i];

base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +

BASE64_ENCODE_CHAR[(v1 <>> 4) & 63] +

BASE64_ENCODE_CHAR[(v2 <

}        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 

v1 = str.charCodeAt(i++);

v2 = str.charCodeAt(i++);

v3 = str.charCodeAt(i++);

base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +

BASE64_ENCODE_CHAR[(v1 <>> 4) & 63] +

BASE64_ENCODE_CHAR[(v2 <>> 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 <

} else if (remain === 2) {

v1 = str.charCodeAt(i++);

v2 = str.charCodeAt(i);

base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +

BASE64_ENCODE_CHAR[(v1 <>> 4) & 63] +

BASE64_ENCODE_CHAR[(v2 <

}            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 

v1 = bytes[i++];

v2 = bytes[i++];

v3 = bytes[i++];

base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +

BASE64_ENCODE_CHAR[(v1 <>> 4) & 63] +

BASE64_ENCODE_CHAR[(v2 <>> 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 <

} else if (remain === 2) {

v1 = bytes[i++];

v2 = bytes[i];

base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +

BASE64_ENCODE_CHAR[(v1 <>> 4) & 63] +

BASE64_ENCODE_CHAR[(v2 <

}            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 <

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 <>> 4) & 255) +                    String.fromCharCode((v2 <>> 2) & 255) +                    String.fromCharCode((v3 <

}            // 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 <>> 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 <>> 4) & 255) +                    String.fromCharCode((v2 <>> 2) & 255);

}            return str;

};

utf8Base64Decode = function (base64Str) {            var str = '', bytes = decodeAsBytes(base64Str), length = bytes.length;            var i = 0, followingChars = 0, b, c;            while (i 

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 

b = bytes[i++];                    if (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 

result += String.fromCharCode(charcode);

} else if (charcode 

result += String.fromCharCode(0xc0 | (charcode >> 6)) +                        String.fromCharCode(0x80 | (charcode & 0x3f));

} else if (charcode = 0xe000) {

result += String.fromCharCode(0xe0 | (charcode >> 12)) +                        String.fromCharCode(0x80 | ((charcode >> 6) & 0x3f)) +                        String.fromCharCode(0x80 | (charcode & 0x3f));

} else {

charcode = 0x10000 + (((charcode & 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 

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 

b = tmpStr.charCodeAt(i++);                    if (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);

大家觉得有帮助请点个赞

作者:心之所善兮

链接:https://www.jianshu.com/p/8928bc9062c4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值