Это происходит почти в каждом JS WYSIWYG. В частности, изменение поведения «вставить из слова» может включать в себя исправление или расширение javascript timymce / wysiwyg, но если вам все равно, откуда берутся пустые теги <p>
, и вы хотите избавиться от всех отправленных, у вас есть некоторые опции.
[отредактировал мой ответ после того, как мне пришлось сделать это снова самому]
Если вам нужно много исправлять / переписывать html, вам, вероятно, стоит взглянуть на модуль HTML Purifier . Он имеет расширенную опцию удаления пустых и заполненных элементов HTML, а также исправления и фильтрации xss. Но это медленно.
Есть модуль Empty Paragraph Killer , , но сейчас он не работает для D7, так что вы можете пропустить это.
Самое прямое решение - написать собственный фильтр ввода в пользовательском модуле. Вот пример модуля фильтра , который вы можете скопировать и извлечь уроки. Или вы можете просто скопировать мой:
/* 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.');
}
}
Поместите все это в пользовательский модуль, перейдите в конфигурацию и отредактируйте текстовые форматы и активируйте фильтр «Убить пустые абзацы». Так и должно быть.
Последнее замечание: если вы действительно хотите, чтобы они исчезли, например, «не в базе данных», «никогда не вернется», вы сможете использовать этот фильтр с модулем Sanitizable удалить все пустые <p>
s при отправке. Применяются обычные предупреждения о том, что вы можете позабавиться с контентом до того, как он попадет в базу данных.