2014-01-07 3 views
4

Я пытаюсь написать расширение для Gmail, которое позволяет сохранять почту как заметку в Evernote, но ENML is pretty strict Evernote, как и в, не позволяет использовать внешние стили.Преобразование HTML в ENML

Так что я ищу, чтобы сделать что-то вроде так -
- конвертировать внешние стили Inline,
- проверить/балансировать теги
- очистить теги, Evernote считает наступательную

Так, прежде чем я попытайтесь вставить парсер для написания выше, кто-нибудь знает библиотеку php, которая уже делает тяжелый подъем?

Если нет, то каков способ перехода с вышеуказанным требованием?

+1

лишь несколько интересна «проблема» является преобразование на основе правил стилей CSS селектор в встроенных стилей: «* Все * стили должны быть указаны в линию, используя«стиль «атрибут». Это интересно, потому что это требует создания DOM, а затем применения правил, как это делает браузер. Вторая задача может быть выполнена с помощью «мягкого» HTML-анализатора (хотя, возможно, такой недействительный ввод должен быть немедленно отклонен?), А третья задача может быть тривиально обработана с помощью DOM-ходьбы. – user2864740

+1

@ user2864740, мы не можем отклонить все недопустимые html, некоторые html-письма так плохо написаны, w3c спрыгнет с высокого здания, если они видят (; И разбор CSS будет включать замену всех 'class =" blah "' материал для 'style =" blah; blah; ". Я надеюсь, что найду что-то в сети – Shrinath

+0

ENL не HTML: не все недопустимые HTML имеют правильное преобразование XML/ENL (хотя ленивый процессор HTML в конечном итоге DOM, DOM никогда не может содержать несогласованные теги, поэтому проблема «исправления» разметки остается во внешней HTML-библиотеке, которая генерирует такую ​​DOM). И да, как обсуждалось выше, преобразование в встроенный 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