Automatyczne czyszczenie kodu HTML ze zbędnego CSS

0

Mam plik HTML wygenerowany z poziomu Worda (nie mogę użyć innego edytora). Dokument zapisałem jako filtrowany HTML. Jednak w kodzie zostaje sporo stylów dodawanych przez Worda. Część stylów jest potrzebna i musi zostać. Resztę chcę usunąć. Fragment kodu wygląda następująco:

<p style="smieci, smieci">tekst tekst <span class="wyroznienie">tekst</span> tekst <span style="smieci1, smieci1">tekst</span></p>

Zależy mi na tym aby automatycznie doprowadzić kod do postaci:

<p>tekst tekst <span class="wyroznienie">tekst</span> tekst tekst</p>

Idealnym rozwiązaniem mojego problemu będzie narzędzie, które:

  • dokona analizy kodu,
  • wygeneruje listę wszystkich użytych stylów,
  • po usunięciu pozycji z listy dokona modyfikacji kodu i usunie wszystkie wystąpienia zbędnych stylów,

Klasyczne znajdź i zastąp odpada ponieważ kodu jest sporo. Ręczna jego analiza zajmie sporo czasu.

Czy ktoś z Was zna sposób/narzędzie, które ułatwi mi czyszczenie kodu.

0

A czemuż to nie możesz użyć nic innego?

Co do tematu: Nie znam, ale pewnie regexpami by się dało.

0

HTML Tidy potrafił w pewien sposób oczyścić kod wygenerowany przez Office'a, gdy odpaliło się go z opcją 'clean'. Czy jednak usuwało to wszystkie style inline i na ile było konfigurowalne... nie wiem, na szczęście od (bardzo) dawna nie musiałem tego używać.

Co to znaczy, że chcesz usunąć część stylów (tych dodawanych przez Worda), a "część jest potrzebna"? Zauważ, że w drugim przykładzie, po oczyszczeniu, nie masz ŻADNYCH stylów. Klasa to nie jest styl, tylko co najwyżej punkt zaczepiani dla stylów (a nawet niekoniecznie).

Zbudowanie listy dopuszczalnych stylów i filtrowanie tylko niektórych deklaracji byłoby troszkę bardziej skomplikowane. Możesz jednak zrobić to wszystko dość łatwo zwykłymi regexpami, na pałę :), jeśli założysz np., że wszystko co jest w atrybucie "style" jest be. Takie atrybuty można raczej łatwo usunąć. Musisz tylko zadbać o to, by Twoje style -- te, które chcesz zachować -- były definiowanie na poziomie zewnętrznego arkusza stylów. Czyli tak, jak masz w tym drugim przykładzie kodu: w HTML-u masz tylko klasę wyroznienie, a w arkuszu CSS piszesz regułę span.wyroznieine {...}.

Jeśli chciałbyś to zrobić porządnie, to możesz wręcz użyć parsera HTML (lub XHTML / XML) i zrobić to tak, jak należy: parser zbuduje za Ciebie drzewo dokumentu, a Ty po nim po prostu chodzisz i wywalasz atrybuty style. Tak zmodyfikowane drzewo zapisujesz do pliku i gotowe.

W wielu przypadkach sprawdza się też metoda z wyrażeniami regularnymi. Zwykłe preg_replace w PHP. Niektórzy jednak uważają, że używanie wyrażeń regularnych do parsowania HTML-a to szatański pomysł ;).

0
winerfresh napisał(a)

A czemuż to nie możesz użyć nic innego?

Bo nikt nie przygotuje dużej ilości treści w inny sposób.

bswierczynski napisał(a)

HTML Tidy potrafił w pewien sposób oczyścić kod wygenerowany przez Office'a, gdy odpaliło się go z opcją 'clean'. Czy jednak usuwało to wszystkie style inline i na ile było konfigurowalne... nie wiem, na szczęście od (bardzo) dawna nie musiałem tego używać.

Dokładnie i to odpada. Muszę zostawić część.

bswierczynski napisał(a)

Co to znaczy, że chcesz usunąć część stylów (tych dodawanych przez Worda), a "część jest potrzebna"? Zauważ, że w drugim przykładzie, po oczyszczeniu, nie masz ŻADNYCH stylów. Klasa to nie jest styl, tylko co najwyżej punkt zaczepiani dla stylów (a nawet niekoniecznie).

Tekst w Wordzie jest w określony sposób formatowany. Zapisując dokument jako filtrowany plik HTML zachowuję to dodatkowe formatowanie (które jest mi potrzebne). To formatowanie to właśnie wybrane klasy. Dodatkowo dostaję jeszcze tony zbędnych CSS, których nie potrzebuję. Te CSS-y to definicje stylów w nagłówku oraz wywołania w postaci klas i identyfikatorów.

Faktycznie mój przykład nie był zbyt szczęśliwy. Chodzi o to, że dostaję duży (kilkusetstronicowy) dokument w formacie Worda. Tekst jest formatowany za pomocą specjalnych stylów stworzonych w Wordzie. Te style chcę zachować (jest ich kilka/kilkanaście). Przy zapisie do pliku HTML w prezencie od Worda dostaję jeszcze dziesiątki stylów oraz klas i identyfikatorów. Podsumowując mam:

  • kilka/kilkanaście potrzebnych stylów,
  • kilkadziesiąt/kilkaset dodatkowych stylów,

W obu przypadkach kod wygląda tak, że:

  • w HEAD mam definicje wszystkich stylów,
  • w tekście mam klasy i identyfikatory,

Muszę go przerobić na HTML zachowując wybrane klasy i identyfikatory. Resztę muszę usunąć z tekstu. Jak się domyślacie przy kilkuset stronach tekstu te dodatkowe klasy i identyfikatory dopisane np. do każdego akapitu obciążają dokument.

bswierczynski napisał(a)

Zbudowanie listy dopuszczalnych stylów i filtrowanie tylko niektórych deklaracji byłoby troszkę bardziej skomplikowane. Możesz jednak zrobić to wszystko dość łatwo zwykłymi regexpami, na pałę :), jeśli założysz np., że wszystko co jest w atrybucie "style" jest be. Takie atrybuty można raczej łatwo usunąć. Musisz tylko zadbać o to, by Twoje style -- te, które chcesz zachować -- były definiowanie na poziomie zewnętrznego arkusza stylów. Czyli tak, jak masz w tym drugim przykładzie kodu: w HTML-u masz tylko klasę wyroznienie, a w arkuszu CSS piszesz regułę span.wyroznieine {...}.

Nie bardzo bo jeżeli mam do odfiltrowania klasy to już nie mogę każdej klasy traktować tak samo. Jednym wyjściem jest analiza kodu i wyłapywanie wszystkich zbędnych klas a następnie usuwanie w sposób podany przez Ciebie. To trochę meczące mając na uwadze, że dokumentów jest więcej i te bonusy od Worda nie zawsze są takie same.

0

htmlpurifier - szukaj w google. Biblioteka w php, która umożliwia wyczyszczenie z niechcianych znaczników, pozwalając na pozostawienie zdefiniowanych.

0

A nie prościej kopiuj/wklej do notatnika (ew. jakiegoś edytora z kolorowaniem składni, np Notepad++) i style sobie zdefiniujesz jak będziesz chciał...
Czasami lepiej (szybciej) coś od początku zrobić niż poprawiać po innych ;-) .

1 użytkowników online, w tym zalogowanych: 0, gości: 1