Скопируйте и вставьте содержимое во входные данные TinyMCE в раздутом HTML - PullRequest
1 голос
/ 26 марта 2011

Я использую TinyMCE для различных проектов. У меня проблема с банкоматом в том, что многие пользователи копируют и вставляют источники данных контента, такие как Word или OpenOffice, во вход TinyMCE. Это часто приводит к раздутому коду (например, такие вещи, как <span lang="EN-GB"> переходят из OpenOffice). Очистка TinyMCE не удаляет эти теги. Есть ли способ вырезать весь форматирующий до текст, вставленный в область ввода TinyMCE? Или есть другой способ предотвратить такой раздутый код, например, фильтруя его на стороне сервера с помощью PHP?

Ответы [ 2 ]

2 голосов
/ 16 июня 2013

Я знаю, что это вопрос opd, но в интересах других, которые могут искать ответ на этот вопрос (как я!), Теперь TinyMCE включает возможность контролировать то, что вставлено в текстовое поле.

В вызове init добавьте плагин "paste" и затем установите любые необходимые параметры, например,

tinyMCE.init({
    ...
    plugins: "paste",
    paste_auto_cleanup_on_paste : true,
    paste_remove_styles: true,
    paste_remove_styles_if_webkit: true,
    paste_strip_class_attributes: "all",
    paste_remove_spans : true,
    ...
});

Все параметры доступны в вики tinyMCE

1 голос
/ 28 марта 2011

Я удаляю все тэги, используя следующую функцию on_preprocessc:

strip_tags = function (str, allowed_tags) {
    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;
};

В начальной папке

paste_preprocess : function(pl, o) {

// remove Clipboard header on MAC
var pos_sel = o.content.search("EndSelection:");
var pos_fra = o.content.search("EndFragment:");
var mac_header_found = false;

if (o.content.search("Version:") == 0 && pos_sel < 135 && pos_sel > 120){
    o.content = o.content.substring(pos_sel+23);
    mac_header_found = true;
}
else if (o.content.search("Version:") == 0 && pos_fra < 80 && pos_fra > 75){
    o.content = o.content.substring(pos_fra+23);
    mac_header_found = true;
}

// Copy from Word oder OpenOffice (MAC) - remove header
if (o.wordContent || mac_header_found) {
    // first style tag + content to be removed
    var pos_start_style = o.content.search('<style');
    var pos_end_style = o.content.search('</style>');
    if (pos_start_style > 0 && pos_end_style > pos_start_style) {
        o.content = o.content.substring(0, pos_start_style).concat(o.content.substring(pos_end_style + 8));
    }
    // complete Worddokument gets pasted
    else {
        var pos_start_p = o.content.search('<p');
        if (pos_start_p) o.content = o.content.substring(pos_start_p);
    }
}

    o.content = ir.im.strip_tags( o.content, '' );

// NO-Break Zero-width space if empty
if (o.content == '') {
    o.content = '&#65279;';
}   
},
...