问题
i want to strip all the html tags when pasting in tinymce editor. following is the code which is not functional... following is the tinymce settings... the paste_preprocess callback is not trigering... am i missing some option..?
tinyMCESettings = [ {
mode : "none,textareas",
height:heightEditor,
width:'100%',
plugins: "paste",
theme : "advanced", //skin : "wp_theme",
theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter",
relative_urls : "true",
paste_use_dialog : false,
paste_auto_cleanup_on_paste : false,
content_css: styleSheetToLoadForTinyMCE + "?" + new Date().getTime(),
force_p_newlines: false,
setup: function (ed) {
ed.onInit.add(
function (ed, evt) {
//resizeFrame1();
var a = tinyMCE.get(ed.id).getContent();
if(a.indexOf("hcRestrictedMode", 0) > 0){
ed.getDoc().designMode = "off";
setTimeout(function(){
tinyMCE.activeEditor.dom.setAttrib(tinyMCE.activeEditor.dom.select(".hcEditable"), 'contenteditable', 'true');
}, 1000);
}
});
},
paste_preprocess : function(pl, o) {
// Content string containing the HTML from the clipboard
alert(o.content);
o.content = o.content.replace(/<.+?>/,"");
},
paste_postprocess : function(pl, o) {
// Content DOM node containing the DOM structure of the clipboard
alert(o.content)
o.content = o.content.replace(/<.+?>/,"");
}
}];
help here... thnx in advance...
回答1:
Here is the config code:
paste_preprocess : function(pl, o) {
alert('pasteprocess startet');
o.content = strip_tags(o.content,'');
//o.content = strip_tags(o.content,'<b><u><i><p><br><img>'); // use this i.e. to keep some tags
alert('pasteprocess ended - function strip_tags found and used');
},
Here is the function used (taken from here)
function strip_tags (str, allowed_tags) {
// Strips HTML and PHP tags from a string
//
// version: 1006.1915
// discuss at: http://phpjs.org/functions/strip_tags // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: Luke Godfrey
// + input by: Pul
// + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Onno Marsman // + input by: Alex
// + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + input by: Marc Palau
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + input by: Brett Zamir (http://brett-zamir.me) // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Eric Nagel
// + input by: Bobby Drake
// + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Tomasz Wesolowski // * example 1: strip_tags('<p>Kevin</p> <b>van</b> <i>Zonneveld</i>', '<i><b>');
// * returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
// * example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
// * returns 2: '<p>Kevin van Zonneveld</p>'
// * example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>"); // * returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
// * example 4: strip_tags('1 < 5 5 > 1');
// * returns 4: '1 < 5 5 > 1'
var key = '', allowed = false;
var matches = []; var allowed_array = [];
var allowed_tag = '';
var i = 0;
var k = '';
var html = '';
var replacer = function (search, replace, str) {
return str.split(search).join(replace);
};
// Build allowes tags associative array
if (allowed_tags) {
allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi);
}
str += '';
// Match tags
matches = str.match(/(<\/?[\S][^>]*>)/gi);
// Go through all HTML tags
for (key in matches) {
if (isNaN(key)) {
// IE7 Hack
continue; }
// Save HTML tag
html = matches[key].toString();
// Is tag not in allowed list? Remove from str!
allowed = false;
// Go through all allowed tags
for (k in allowed_array) { // Init
allowed_tag = allowed_array[k];
i = -1;
if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');} if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag) ;}
// Determine
if (i == 0) { allowed = true;
break;
}
}
if (!allowed) {
str = replacer(html, "", str); // Custom replace. No regexing
}
}
return str;
}
EDIT: set paste_auto_cleanup_on_paste
to true and it will work (checked your config in my system)
回答2:
Following is the code which solved the problem.
paste_preprocess : function(pl, o) {
// Content string containing the HTML from the clipboard
var str = o.content;
var ta = document.createElement("textarea");
ta.innerHTML = str.replace(/</g,"<").replace(/>/g,">");
o.content = CleanWordHTML(ta.value);
},
paste_postprocess : function(pl, o) {
},
CleanWordHTML(ta.value); is user defined function where the html strings are extracted regular expressions.
来源:https://stackoverflow.com/questions/3520608/paste-preprocess-tinymce-issue