2008-12-18 111 views
9

我有一個網站,用戶可以使用自定義的TinyMCE實現發佈的東西(如在論壇,評論等)。他們中的很多人喜歡從Word複製&粘貼,這意味着他們的輸入通常會伴隨大量關聯的MS內聯格式。PHP清理粘貼微軟輸入

我不能擺脫<span whatever>,因爲TinyMCE依賴span標籤進行一些格式化,我不能(也不想)強制用戶使用TinyMCE的「從Word粘貼」功能(這似乎並不能很好地工作)。

任何人都知道圖書館/類/功能,將爲我照顧這個?這一定是一個常見問題,儘管我找不到任何明確的答案。我最近一直在想,尋找特定於MS的模式的一系列蠻力正則表達式可能會訣竅,但我不想重寫一些可能已經可用的東西,除非我必須這樣做。

另外,修正捲曲引號,em-dashes等會很好。我現在有我自己的東西來做這件事,但我真的只想找到一個MS轉換過濾器來統治它們。

回答

7

HTML Purifier將創建符合標準的標記並篩選出許多可能的攻擊(如XSS)。

對於不需要XSS過濾的更快清理,我使用PECL擴展Tidy,它是Tidy HTML實用程序的綁定。

如果那些幫助不到你,我建議你切換到具有此功能built-in的FCKEditor。

+0

謝謝,但這些都不符合MS格式,這是我主要感興趣的.HTML Purifier已計劃使用3.5版本,但需要「必要的研究」。 – da5id 2008-12-18 21:48:06

0

該網站http://word2cleanhtml.com/在從Word轉換中做得很好。我在PHP中使用它通過報廢,處理一些遺留的HTML,直到現在它工作得很好(結果是非常乾淨的<p>, <b>代碼)。當然,作爲一種外部服務,在您的案例中使用它進行在線處理並不好。

如果您嘗試它並且會帶來很多400錯誤,請嘗試先用Tidy過濾HTML。

0

在我的情況下,有一種模式。不需要的部分總是開始

<!-- [if gte mso 9]> 

並最終由

<![endif]--> 

所以我的解決方案是之前和該塊後切出一切:

$array = explode("<!-", $string, 2); 
$begin = $array[0]; 
$end=substr(strrchr($string,'[endif]-->'),10); 
echo $begin.$end; 
0

在我而言,這工作得很好:

$text = strip_tags($text, '<p><a><em><span>'); 

而不是試圖拉出你不想要的東西,如嵌入式單詞xml,你可以指定你是允許的標籤。