Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复印及;将内容粘贴到TinyMCE输入结果中,并生成臃肿的HTML_Php_Html_Formatting_Tinymce_Copy Paste - Fatal编程技术网

Php 复印及;将内容粘贴到TinyMCE输入结果中,并生成臃肿的HTML

Php 复印及;将内容粘贴到TinyMCE输入结果中,并生成臃肿的HTML,php,html,formatting,tinymce,copy-paste,Php,Html,Formatting,Tinymce,Copy Paste,我在各种项目中使用TinyMCE。我使用ATM的问题是,许多用户将Word或OpenOffice等源中的内容复制粘贴到TinyMCE输入中。这通常会导致代码臃肿(例如,等内容被OpenOffice接管)。TinyMCE的清理似乎并没有移除这些标签。在将文本粘贴到TinyMCE输入区域之前,是否有办法去除所有格式?或者有没有其他方法可以防止这种臃肿的代码,例如用PHP过滤it服务器端?我在预处理上使用以下C函数删除所有标记: strip_tags = function (str, allowed_

我在各种项目中使用TinyMCE。我使用ATM的问题是,许多用户将Word或OpenOffice等源中的内容复制粘贴到TinyMCE输入中。这通常会导致代码臃肿(例如,
等内容被OpenOffice接管)。TinyMCE的清理似乎并没有移除这些标签。在将文本粘贴到TinyMCE输入区域之前,是否有办法去除所有格式?或者有没有其他方法可以防止这种臃肿的代码,例如用PHP过滤it服务器端?

我在预处理上使用以下C函数删除所有标记:

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;
};
strip\u tags=函数(str,允许的\u标记){
var key='',allowed=false;
var匹配=[];允许的var_数组=[];
允许的var_标记=“”;
var i=0;
var k='';
var html='';
var replacer=函数(搜索、替换、str){
返回str.split(搜索)。join(替换);
};
//构建allowes标记关联数组
如果(允许的\u标记){
允许的_数组=允许的_标记匹配(/([a-zA-Z0-9]+)/gi);
}
str+='';
//匹配标签
matches=str.match(/(]*>)/gi);
//检查所有HTML标记
用于(输入匹配项){
如果(isNaN(键)){
//IE7黑客
继续;}
//保存HTML标记
html=匹配[key].toString();
//标签不在允许列表中吗?从str中删除!
允许=错误;
//检查所有允许的标签
对于(k在允许的_数组中){//Init
允许的_标记=允许的_数组[k];
i=-1;
如果(i!=0){i=html.toLowerCase().indexOf(“”);}

如果(i!=0){i=html.toLowerCase().indexOf('我知道这是一个opd问题,但为了其他可能正在搜索答案的人(像我一样!),TinyMCE现在包括控制粘贴到文本框中的内容的功能

在init调用中,添加“粘贴”插件,然后设置所需的任何选项,例如

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,
    ...
});

你可以看到

中的所有选项看起来都很棒。你必须试试。因此,基本上,如果我做对了,我们定义了一个函数来过滤所有非白名单HTML元素,它是通过tinyMCE init调用的。或者我有什么错误吗?它不是通过init调用的,而是在粘贴时调用的函数(预处理)是使用init定义的
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,
    ...
});