從WORD粘貼內容時,使用TinyMCE和WYSIWYG模塊使用「強制清理標準粘貼」清除了很多標記。但似乎留下以下代碼:Drupal所見即所得自動刪除
<p> </p>
有什麼辦法讓我可以過濾出來嗎?
從WORD粘貼內容時,使用TinyMCE和WYSIWYG模塊使用「強制清理標準粘貼」清除了很多標記。但似乎留下以下代碼:Drupal所見即所得自動刪除
<p> </p>
有什麼辦法讓我可以過濾出來嗎?
您確定它是由TinyMCE和所見即所得造成的嗎?它也可以是所見即所得(當「去除換行符」關閉時)和您的輸入過濾器設置(「換行符轉換器」打開)中的設置組合。
據我所知tinimce有一個乾淨的代碼功能。 當這個被調用時,它應該刪除空的段落。
但你應該試試這個...
使用我可以看到的所有乾淨的代碼選項 – Rupert 2010-02-01 14:27:49
一個快速簡便的方法就是把你的主題的template.php文件是這樣的:
<?php
function THEMENAME_preprocess_node(&$vars, $hook) {
$vars['content'] = str_replace('<p> </p>','', $vars['content']);
}
這只是做了快速查找並用空白替換空白段落。這是一種黑客,但它的工作。
這幾乎發生在每一個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 &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 module來刪除所有空的<p>
s提交。在進入數據庫之前關於內容的一般警告適用。
你並不總是需要上面的黑客。正如marcvangend所提到的,但是可以用更普通的英語,你可以在設置中改變它。
空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'));
}
我在使用CKEditor的一個非常類似的問題(不所見即所得模塊)。我在這裏嘗試瞭解決方案,但沒有運氣。有沒有人在CKEditor中遇到過相同的行爲? – ford 2011-08-17 22:33:59