2014-01-07 79 views
4

我正在嘗試爲Gmail編寫一個擴展程序,它允許您在Evernote中保存郵件作爲筆記,但是Evernote的ENML is pretty strict,因爲它不允許外部樣式。將HTML轉換爲ENML

所以我所希望做的是像這樣 -
- 轉化外部樣式內聯,
- 驗證/平衡標籤
- 淨化是Evernote的我之前認爲的進攻

所以標籤嘗試跳入上面編寫解析器,有沒有人知道一個PHP庫已經在做繁重的工作?

如果不是,那麼符合上述要求的方法是什麼?

+1

唯一有點有趣的「問題」轉換規則爲基礎的選擇CSS樣式到內聯樣式:「*所有*風格必須指定使用「風格的行內'屬性'。「這很有趣,因爲它需要構建DOM,然後像瀏覽器一樣應用規則。第二項任務可以通過一個「寬鬆」的HTML解析器來完成(儘管也許這樣的無效輸入應該立即被拒絕?),第三項任務可以通過DOM漫遊進行平凡的處理。 – user2864740

+1

@ user2864740,我們不能拒絕所有無效的html,一些html郵件寫得很糟糕,如果他們看到w3c會跳下一座高樓(();而且CSS解析會涉及替換所有'class =「blah」'我希望我能在網上找到一些東西 – Shrinath

+0

ENL不是HTML:並非所有無效的HTML都有一個有效的XML/ENL轉換(儘管一個寬鬆的HTML處理器最終會以DOM; DOM不能包含不匹配的標籤,因此修復標記的問題留給產生這種DOM的外部HTML庫)。是的,正如上面所討論的,向內聯式CSS轉換是唯一有趣的「問題「 – user2864740

回答

1

如果唯一有趣的問題是將外部樣式轉換爲嵌入樣式您可以使用https://github.com/tijsverkoyen/CssToInlineStyles。它還具有易於部署的composer package at packagist

我用這樣的:

<?php 

// ... 

use \TijsVerkoyen\CssToInlineStyles\CssToInlineStyles; 

// ... 

$css = file_get_contents('./content.html'); 

// create instance 
$cssToInlineStyles = new CssToInlineStyles(); 
$css = file_get_contents('./styles.css'); 

$cssToInlineStyles->setHTML($content); 
$cssToInlineStyles->setCSS($css); 

$mail_content = $cssToInlineStyles->convert(); 
+0

有用的人,謝謝!!!我很容易解決了其他問題,所以只剩下這一個! – Shrinath