KindEditor4.1.3可能在鏈接地址的escape上出了點問題,發過的帖子再編輯時修改帖子中鏈接或圖片的src時url中的:會被escape,變為%3A,雖然不影響編輯后的結果,但難免看起來會引起誤會。
看了下KE的源碼,發現問題出在beforeSetHtml方法中,下面是此方法代碼:
self.beforeSetHtml(function(html) { return html.replace(/<embed[^>]*type="([^"]+)"[^>]*>(?:<//embed>)?/ig, function(full) { var attrs = _getAttrList(full); attrs.src = _undef(attrs.src, ''); attrs.width = _undef(attrs.width, 0); attrs.height = _undef(attrs.height, 0); return _mediaImg(self.themesPath + 'common/blank.gif', attrs); }) .replace(/<a[^>]*name="([^"]+)"[^>]*>(?:<//a>)?/ig, function(full) { var attrs = _getAttrList(full); if (attrs.href !== undefined) { return full; } return '<img class="ke-anchor" src="' + self.themesPath + 'common/anchor.gif" data-ke-name="' + escape(attrs.name) + '" />'; }) .replace(/<script([^>]*)>([/s/S]*?)<//script>/ig, function(full, attr, code) { return '<div class="ke-script" data-ke-script-attr="' + escape(attr) + '">' + escape(code) + '</div>'; }) .replace(/<noscript([^>]*)>([/s/S]*?)<//noscript>/ig, function(full, attr, code) { return '<div class="ke-noscript" data-ke-noscript-attr="' + escape(attr) + '">' + escape(code) + '</div>'; }) .replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/ig, function(full, start, key, src, end) { if (full.match(//sdata-ke-src="[^"]*"/i)) { return full; } full = start + key + '="' + src + '"' + ' data-ke-src="' + escape(src) + '"' + end; return full; }) .replace(/(<[^>]+/s)(on/w+="[^"]*"[^>]*>)/ig, function(full, start, end) { return start + 'data-ke-' + end; }) .replace(/<table[^>]*/s+border="0"[^>]*>/ig, function(full) { if (full.indexOf('ke-zeroborder') >= 0) { return full; } return _addClassToTag(full, 'ke-zeroborder'); }); });
問題是由下面這一行代碼導致的,DEBUG了下,這里的escape是瀏覽器的native方法,而不是K.escape:
full = start + key + '="' + src + '"' + ' data-ke-src="' + escape(src) + '"' + end;
解決方法:
將escape(src)改為src或者_escape(src),武林網上編輯器已更新。
新聞熱點
疑難解答