百度富文本Ueditor会追加标签的问题

我们在使用ueditor回写文本有时会出现本该是标签,却直接变成了文本写入到了输入框,并且每一次提交都会追加一个标签

这是因为你保存于数据库的文本标签是经过转义的,如:<p>        ,

这些转义字符在经过 ueditor.all.js 的 setContent 转换成标签的时候会直接变成文本回写到输入框中,而每一次回写setContent 都会自动给你添加一个p标签,此时我们

要提前转义成标签,让ueditor在回写的时候就认为这是一个标签,而不是转义成文本回写到输入框,当你有标签返回的时候ueditor就不会再添加p标签

setContent: function (html, isAppendTo, notFireSelectionchange) {
            html = strDiscode(html);              //转义传入的文本
            var me = this;

            me.fireEvent('beforesetcontent', html);
            var root = UE.htmlparser(html);          //此处将html文本转换成uNode节点,若未转义则会变成文本直接写入输入框
            me.filterInputRule(root);

            html = root.toHtml();                //此处转义节点内的文本内容

            me.body.innerHTML = (isAppendTo ? me.body.innerHTML : '') + html;


            function isCdataDiv(node){
                return  node.tagName == 'DIV' && node.getAttribute('cdata_tag');
            }
            //给文本或者inline节点套p标签
            if (me.options.enterTag == 'p') {

                var child = this.body.firstChild, tmpNode;
                if (!child || child.nodeType == 1 &&
                    (dtd.$cdata[child.tagName] || isCdataDiv(child) ||
                        domUtils.isCustomeNode(child)
                        )
                    && child === this.body.lastChild) {
                    this.body.innerHTML = '<p>' + (browser.ie ? '&nbsp;' : '<br/>') + '</p>' + this.body.innerHTML;

                } else {
                    var p = me.document.createElement('p');
                    while (child) {
                        while (child && (child.nodeType == 3 || child.nodeType == 1 && dtd.p[child.tagName] && !dtd.$cdata[child.tagName])) {
                            tmpNode = child.nextSibling;
                            p.appendChild(child);
                            child = tmpNode;
                        }
                        if (p.firstChild) {
                            if (!child) {
                                me.body.appendChild(p);
                                break;
                            } else {
                                child.parentNode.insertBefore(p, child);
                                p = me.document.createElement('p');
                            }
                        }
                        child = child.nextSibling;
                    }
                }
            }
            me.fireEvent('aftersetcontent');
            me.fireEvent('contentchange');

            !notFireSelectionchange && me._selectionChange();
            //清除保存的选区
            me._bakRange = me._bakIERange = me._bakNativeRange = null;
            //trace:1742 setContent后gecko能得到焦点问题
            var geckoSel;
            if (browser.gecko && (geckoSel = this.selection.getNative())) {
                geckoSel.removeAllRanges();
            }
            if(me.options.autoSyncData){
                me.form && setValue(me.form,me);
            }
        },

转义方法

// HTML 支持的数学符号
    function strNumDiscode(str) {
        str = str.replace(/&forall;/g, '∀');
        str = str.replace(/&part;/g, '∂');
        str = str.replace(/&exists;/g, '∃');
        str = str.replace(/&empty;/g, '∅');
        str = str.replace(/&nabla;/g, '∇');
        str = str.replace(/&isin;/g, '∈');
        str = str.replace(/&notin;/g, '∉');
        str = str.replace(/&ni;/g, '∋');
        str = str.replace(/&prod;/g, '∏');
        str = str.replace(/&sum;/g, '∑');
        str = str.replace(/&minus;/g, '−');
        str = str.replace(/&lowast;/g, '∗');
        str = str.replace(/&radic;/g, '√');
        str = str.replace(/&prop;/g, '∝');
        str = str.replace(/&infin;/g, '∞');
        str = str.replace(/&ang;/g, '∠');
        str = str.replace(/&and;/g, '∧');
        str = str.replace(/&or;/g, '∨');
        str = str.replace(/&cap;/g, '∩');
        str = str.replace(/&cap;/g, '∪');
        str = str.replace(/&int;/g, '∫');
        str = str.replace(/&there4;/g, '∴');
        str = str.replace(/&sim;/g, '∼');
        str = str.replace(/&cong;/g, '≅');
        str = str.replace(/&asymp;/g, '≈');
        str = str.replace(/&ne;/g, '≠');
        str = str.replace(/&le;/g, '≤');
        str = str.replace(/&ge;/g, '≥');
        str = str.replace(/&sub;/g, '⊂');
        str = str.replace(/&sup;/g, '⊃');
        str = str.replace(/&nsub;/g, '⊄');
        str = str.replace(/&sube;/g, '⊆');
        str = str.replace(/&supe;/g, '⊇');
        str = str.replace(/&oplus;/g, '⊕');
        str = str.replace(/&otimes;/g, '⊗');
        str = str.replace(/&perp;/g, '⊥');
        str = str.replace(/&sdot;/g, '⋅');
        return str;
    }

//HTML 支持的希腊字母
    function strGreeceDiscode(str) {
        str = str.replace(/&Alpha;/g, 'Α');
        str = str.replace(/&Beta;/g, 'Β');
        str = str.replace(/&Gamma;/g, 'Γ');
        str = str.replace(/&Delta;/g, 'Δ');
        str = str.replace(/&Epsilon;/g, 'Ε');
        str = str.replace(/&Zeta;/g, 'Ζ');
        str = str.replace(/&Eta;/g, 'Η');
        str = str.replace(/&Theta;/g, 'Θ');
        str = str.replace(/&Iota;/g, 'Ι');
        str = str.replace(/&Kappa;/g, 'Κ');
        str = str.replace(/&Lambda;/g, 'Λ');
        str = str.replace(/&Mu;/g, 'Μ');
        str = str.replace(/&Nu;/g, 'Ν');
        str = str.replace(/&Xi;/g, 'Ν');
        str = str.replace(/&Omicron;/g, 'Ο');
        str = str.replace(/&Pi;/g, 'Π');
        str = str.replace(/&Rho;/g, 'Ρ');
        str = str.replace(/&Sigma;/g, 'Σ');
        str = str.replace(/&Tau;/g, 'Τ');
        str = str.replace(/&Upsilon;/g, 'Υ');
        str = str.replace(/&Phi;/g, 'Φ');
        str = str.replace(/&Chi;/g, 'Χ');
        str = str.replace(/&Psi;/g, 'Ψ');
        str = str.replace(/&Omega;/g, 'Ω');

        str = str.replace(/&alpha;/g, 'α');
        str = str.replace(/&beta;/g, 'β');
        str = str.replace(/&gamma;/g, 'γ');
        str = str.replace(/&delta;/g, 'δ');
        str = str.replace(/&epsilon;/g, 'ε');
        str = str.replace(/&zeta;/g, 'ζ');
        str = str.replace(/&eta;/g, 'η');
        str = str.replace(/&theta;/g, 'θ');
        str = str.replace(/&iota;/g, 'ι');
        str = str.replace(/&kappa;/g, 'κ');
        str = str.replace(/&lambda;/g, 'λ');
        str = str.replace(/&mu;/g, 'μ');
        str = str.replace(/&nu;/g, 'ν');
        str = str.replace(/&xi;/g, 'ξ');
        str = str.replace(/&omicron;/g, 'ο');
        str = str.replace(/&pi;/g, 'π');
        str = str.replace(/&rho;/g, 'ρ');
        str = str.replace(/&sigmaf;/g, 'ς');
        str = str.replace(/&sigma;/g, 'σ');
        str = str.replace(/&tau;/g, 'τ');
        str = str.replace(/&upsilon;/g, 'υ');
        str = str.replace(/&phi;/g, 'φ');
        str = str.replace(/&chi;/g, 'χ');
        str = str.replace(/&psi;/g, 'ψ');
        str = str.replace(/&omega;/g, 'ω');
        str = str.replace(/&thetasym;/g, 'ϑ');
        str = str.replace(/&upsih;/g, 'ϒ');
        str = str.replace(/&piv;/g, 'ϖ');
        str = str.replace(/&middot;/g, '·');
        return str;
    }

//

    function strcharacterDiscode(str) {
        // 加入常用解析
        str = str.replace(/&nbsp;/g, ' ');
        str = str.replace(/&quot;/g, "'");
        str = str.replace(/&amp;/g, '&');
        // str = str.replace(/&lt;/g, '‹');
        // str = str.replace(/&gt;/g, '›');

        str = str.replace(/&lt;/g, '<');
        str = str.replace(/&gt;/g, '>');
        str = str.replace(/&#8226;/g, '•');

        return str;
    }

// HTML 支持的其他实体
    function strOtherDiscode(str) {
        str = str.replace(/&OElig;/g, 'Œ');
        str = str.replace(/&oelig;/g, 'œ');
        str = str.replace(/&Scaron;/g, 'Š');
        str = str.replace(/&scaron;/g, 'š');
        str = str.replace(/&Yuml;/g, 'Ÿ');
        str = str.replace(/&fnof;/g, 'ƒ');
        str = str.replace(/&circ;/g, 'ˆ');
        str = str.replace(/&tilde;/g, '˜');
        str = str.replace(/&ensp;/g, '');
        str = str.replace(/&emsp;/g, '');
        str = str.replace(/&thinsp;/g, '');
        str = str.replace(/&zwnj;/g, '');
        str = str.replace(/&zwj;/g, '');
        str = str.replace(/&lrm;/g, '');
        str = str.replace(/&rlm;/g, '');
        str = str.replace(/&ndash;/g, '–');
        str = str.replace(/&mdash;/g, '—');
        str = str.replace(/&lsquo;/g, '‘');
        str = str.replace(/&rsquo;/g, '’');
        str = str.replace(/&sbquo;/g, '‚');
        str = str.replace(/&ldquo;/g, '“');
        str = str.replace(/&rdquo;/g, '”');
        str = str.replace(/&bdquo;/g, '„');
        str = str.replace(/&dagger;/g, '†');
        str = str.replace(/&Dagger;/g, '‡');
        str = str.replace(/&bull;/g, '•');
        str = str.replace(/&hellip;/g, '…');
        str = str.replace(/&permil;/g, '‰');
        str = str.replace(/&prime;/g, '′');
        str = str.replace(/&Prime;/g, '″');
        str = str.replace(/&lsaquo;/g, '‹');
        str = str.replace(/&rsaquo;/g, '›');
        str = str.replace(/&oline;/g, '‾');
        str = str.replace(/&euro;/g, '€');
        str = str.replace(/&trade;/g, '™');

        str = str.replace(/&larr;/g, '←');
        str = str.replace(/&uarr;/g, '↑');
        str = str.replace(/&rarr;/g, '→');
        str = str.replace(/&darr;/g, '↓');
        str = str.replace(/&harr;/g, '↔');
        str = str.replace(/&crarr;/g, '↵');
        str = str.replace(/&lceil;/g, '⌈');
        str = str.replace(/&rceil;/g, '⌉');

        str = str.replace(/&lfloor;/g, '⌊');
        str = str.replace(/&rfloor;/g, '⌋');
        str = str.replace(/&loz;/g, '◊');
        str = str.replace(/&spades;/g, '♠');
        str = str.replace(/&clubs;/g, '♣');
        str = str.replace(/&hearts;/g, '♥');

        str = str.replace(/&diams;/g, '♦');
        str = str.replace(/&#39;/g, '\'');
        str = str.replace(/&nbsp;/g, ' ');
        str = str.replace(/&amp;nbsp;/g, ' ');
        return str;
    }

    function strMoreDiscode(str) {
        str = str.replace(/\r\n/g, "");
        str = str.replace(/\n/g, "");

        str = str.replace(/code/g, "wxxxcode-style");
        return str;
    }

    function strDiscode(str) {
        str = strNumDiscode(str);
        str = strGreeceDiscode(str);
        str = strcharacterDiscode(str);
        str = strOtherDiscode(str);
        str = strMoreDiscode(str);
        return str;
    }
    function urlToHttpUrl(url, rep) {

        var patt1 = new RegExp("^//");
        var result = patt1.test(url);
        if (result) {
            url = rep + ":" + url;
        }
        return url;
    }

 

posted @ 2019-07-26 11:35  高龄码农丹  阅读(1814)  评论(0编辑  收藏  举报