39 votes

TinyMCE Coller en texte brut

C'est l'un des problèmes les plus courants avec les RTE sur le web. Pourriez-vous m'indiquer comment faire ?

  1. Coller comme le TEXTE ORDINAIRE
  2. Conservez le HTML mais supprimez le style WORD/HTML.

Je veux le faire directement sur le paste (callback paste_preprocess), sans ouvrir les boîtes de dialogue fournies par les plugins Paste.

Des idées ou des expériences ?

Merci,

Imran

0 votes

Je pense que cela devrait nettoyer un peu le texte, mais j'apprécierais d'autres suggestions/solutions : 1stclassmedia.co.uk/developers/clean-ms-word-formatting.php

44voto

Thariama Points 26420

Voici ce que je fais pour coller du texte brut.

1. paramètre paste_preprocess (dans tinymce init)

paste_preprocess : function(pl, o) {
  //example: keep bold,italic,underline and paragraphs
  //o.content = strip_tags( o.content,'<b><u><i><p>' );

  // remove all tags => plain text
  o.content = strip_tags( o.content,'' );
},

2. fonction strip_tags (sur le document principal)

// Strips HTML and PHP tags from a string 
// 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'
function strip_tags (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;
}

0 votes

Wow ! Merci Thariama. Où puis-je trouver la définition de "remplaçant" ?

0 votes

Il suffit d'entrer les balises que vous voulez garder dans l'appel strip_tags

2 votes

C'est la seule solution que j'ai trouvée qui supprime tous balises. L'ancien plugin ne dispose que d'options permettant de supprimer le style.

30voto

trinth Points 1058

En fait, vous pouvez maintenant faire ça :

plugins: 'paste',
...
paste_auto_cleanup_on_paste : true,
paste_remove_styles: true,
paste_remove_styles_if_webkit: true,
paste_strip_class_attributes: true,

Le crédit va à : http://www.miuaiga.com/index.cfm/2010/1/7/New-TinyMCE-lets-you-paste-as-plain-text-automatically

11voto

Mario Points 37

Il existe désormais une nouvelle option qui remplace tout ce qui précède :

tinymce.init({
   paste_as_text: true
});

Voir http://www.tinymce.com/wiki.php/Configuration:paste_as_text

ou dans django-tinymce, dans le fichier settings.py :

TINYMCE_DEFAULT_CONFIG = {
   'paste_as_text': True,
}

10voto

ben Points 71

Je l'ai cherché partout Pour TinyMCE, vous pouvez utiliser le comportement intégré de collage en tant que texte. Il suffit de configurer le init tinymce avec les valeurs ci-dessous.

Source : jerome.chevreau, http://www.tinymce.com/forum/viewtopic.php?id=6788

//add paste plugin
plugins : 'paste',
//Keeps Paste Text feature active until user deselects the Paste as Text button
paste_text_sticky : true,
//select pasteAsPlainText on startup
setup : function(ed) {
    ed.onInit.add(function(ed) {
        ed.pasteAsPlainText = true;
    });
}

3voto

Chris Points 3334

J'ai utilisé ça :

    oninit: function (ed) {
        ed.pasteAsPlainText = true;
    }

ainsi que

paste_text_sticky: true

1 votes

@Chris, où les avez-vous placés exactement ?

0 votes

Ceci devrait être placé dans le fichier tinyMCe.init({}) avec d'autres options .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X