2010-02-01 85 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')); 
}