当从WORD粘贴内容时,使用TinyMCE和WYSIWYG模块使用“标准粘贴强制清除”清除了大量标记。但是,似乎要留下以下代码:
<p> </p>
有什么方法可以过滤掉它吗?
答案 0 :(得分: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'));
}
答案 1 :(得分:0)
据我所知,tinymce有一个干净的代码功能。 当调用这个时,它应该删除空段落。
但你应该试试这个......
答案 2 :(得分:0)
你确定它是由TinyMCE和WYSIWYG引起的吗?它也可以是WYSIWYG中的设置(当“删除换行符”关闭时)和输入过滤器设置(“换行符转换器”打开)的组合。
答案 3 :(得分:0)
几乎每个js WYSIWYG都会发生这种情况。修改“从单词粘贴”行为特别涉及修补或扩展timymce / wysiwyg javascript,但是如果你不关心空<p>
标签来自哪里并想要摆脱提交的每一个,你有一些选择。
[我自己最近再次这样做之后编辑了我的答案]
如果您需要进行大量的html更正/重写,您可能应该查看HTML Purifier模块。它有一个高级选项,可以删除空的和已填充的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 &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[^>]*>( |\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.');
}
}
将所有这些放在自定义模块中,转到配置和编辑文本格式,然后激活“Kill Empty Paragraphs”过滤器。应该是它。
最后要注意的是,如果你真的希望它们消失,比如不在数据库中,将永远不会回来,你应该能够使用Sanitizable module的过滤器删除所有提交时空<p>
的内容。关于在内容进入数据库之前弄乱内容的常见警告适用。
答案 4 :(得分:0)
你并不总是需要上述黑客攻击。正如marcvangend所提到的那样,你可以用更简洁的英语来改变它。
答案 5 :(得分:-1)
快速简便的方法就是在主题的template.php中添加类似的内容:
<?php
function THEMENAME_preprocess_node(&$vars, $hook) {
$vars['content'] = str_replace('<p> </p>','', $vars['content']);
}
这只是快速查找并替换以替换空段落。这有点像黑客,但它确实有效。