2010-02-01 86 views
2

从WORD粘贴内容时,使用TinyMCE和WYSIWYG模块使用“强制清理标准粘贴”清除了很多标记。但似乎留下以下代码:Drupal所见即所得自动删除

<p>&nbsp;</p> 

有什么办法让我可以过滤出来吗?

+0

我在使用CKEditor的一个非常类似的问题(不所见即所得模块)。我在这里尝试了解决方案,但没有运气。有没有人在CKEditor中遇到过相同的行为? – ford 2011-08-17 22:33:59

回答

0

您确定它是由TinyMCE和所见即所得造成的吗?它也可以是所见即所得(当“去除换行符”关闭时)和您的输入过滤器设置(“换行符转换器”打开)中的设置组合。

0

据我所知tinimce有一个干净的代码功能。 当这个被调用时,它应该删除空的段落。

但你应该试试这个...

+0

使用我可以看到的所有干净的代码选项 – Rupert 2010-02-01 14:27:49

-1

一个快速简便的方法就是把你的主题的template.php文件是这样的:

<?php 
function THEMENAME_preprocess_node(&$vars, $hook) { 
    $vars['content'] = str_replace('<p>&nbsp;</p>','', $vars['content']); 
} 

这只是做了快速查找并用空白替换空白段落。这是一种黑客,但它的工作。

0

这几乎发生在每一个js所见即所得。改变“从字粘贴”行为具体会涉及修补或延长timymce/wysiwyg JavaScript,但如果你不关心空的<p>标签来自哪里,并希望摆脱提交的每一个,你有一些选择。

[编辑我的回答后,我不得不这样做是最近又自己。如果你需要很多的HTML修正

/重写你应该看看HTML Purifier模块。它有一个高级选项,用于删除空白和nbsp填充的HTML元素,以及校正和xss过滤。但速度很慢。

Empty Paragraph Killer模块, ,但它现在不适用于D7,所以你可以跳过。

最直接的解决方案是在自定义模块中编写自己的输入过滤器。有一个例子filter module在这里你可以复制和学习。或者你也可以复制我的:

/* Implements hook_filter_info(). */ 
function YOURMODULE_filter_info() { 

    $filters['kill_empty'] = array(
    'title' => t('Kill Empty Paragraphs'), 
    'description' => t('Remove paragraphs that contain only whitespace (including line breaks and &amp;nbsp;\'s) that are often inserted by editors using WYSIWYGs.'), 
    'process callback' => '_YOURMODULE_kill_empty', 
    'tips callback' => '_YOURMODULE_kill_empty_tips', 
); 
    return $filters; 
} 

/* Process callbacks, where the work is done. */ 
function _YOURMODULE_kill_empty($text, $filter) { 
    // Remove all <p> tags containing only nbsp's, white space, or nothing. 
    return preg_replace('/<p[^>]*>(&nbsp;|\s)*<\/p>/', '', $text); 
} 

/* Tips for the content editor, if you want them. I usually take these out. */ 
function _YOURMODULE_kill_empty_tips($filter, $format, $long = FALSE) { 
    if (!$long) { 
    // This string will be shown in the content add/edit form. 
    return t('Use one [enter] to create a new paragraph. More than one will be ignored.'); 
    } 
    else { 
    // And this one on the "Filter Tips" page. 
    return t('To maintain consistancy in content display, empty paragraphs inserted by WYSIWYG editors will be removed.'); 
    } 
} 

把所有这些自定义模块中,去配置和编辑的文本格式,并激活“杀空段落”过滤器。应该是这样的。

最后一点需要注意的是,如果你真的想让它们消失,就像不在数据库中一样,永远不会再回来,你应该可以使用这个过滤器和Sanitizable module来删除所有空的<p> s提交。在进入数据库之前关于内容的一般警告适用。

0

你并不总是需要上面的黑客。正如marcvangend所提到的,但是可以用更普通的英语,你可以在设置中改变它。

  1. 转到Drupal的管理
  2. 站点配置
  3. 输入格式
  4. 配置您所选择的输入格式
  5. 取消选择 “换行转换器”
1

空p标签是以前放置表示线的改变,但是drupal wysiwyg会自动添加一个非破坏性空间标记,从而无法正确显示,并且周四被替换成字符替换“?”

工作液:

$to_filter = array('bloc_1_delta', 'bloc_2_delta', 'bloc_3_delta', 'bloc_4_delta'); 
if (in_array($vars['block']->delta, $to_filter)) { 
    $vars['block']->content = str_replace("<p></p>", "<br/>", mb_cοnvert_encoding($vars['block']->content, 'HTML-ENTITIES', 'UTF-8')); 
}