Usuwanie znaczników HTML z tekstu

0

Witam. chciałbym się dowiedzieć w jaki sposób usunąć z tekstu znaczniki html typu href, img itp. Słyszałem coś o Jsoup. Generalnie jest sobie textaera w której wpprowadzamy opis, chciałbym potem w walidacji, podczas zapisywania, usuwać wszelkie znaczniki html poza ,

itp, zaś href,url,img itp usuwać z tekstu.</p>

weźmy na przykłąd taki ktest. CHciałbym usunąć z niego znaczniki ,

, itp...


<p>Ostrzeżenie dla zapracowanych! Jeżeli nie masz czasu czytać tego tekstu, to daj mi <strong>tylko 5 minut, </strong>a ja udowodnię Ci, że po przeczytaniu tych słów zyskasz nieograniczone zasoby czasu i co najważniejsze uwierzysz, że </p> <h1> Od dzisiaj będziesz mógł znaleźć czas na wszystko.</h1> <p>Oczywiście jeszcze żadna książka nie zmieniła w ciągu jednego dnia życia żadnego człowieka. Doskonale wiesz, że nie znajdziesz tutaj magicznej różdżki, która w czarodziejski sposób zmieni Twoje życie. Jednak jeżeli postanowisz zmienić swoje nieskuteczne nawyki dotyczące zarządzania czasem i włożysz odrobinę zaangażowania, możesz po prostu zacząć odpowiadać swoim bliskim: tak, oczywiście z chęcią wybiorę się na wycieczkę, mam wolny czas... </p> <p>Wyobraź sobie, jakby wyglądało Twoje życie, gdyby na miejsce znienawidzonej mantry <strong>"Nie mam czasu..." </strong>pojawiłoby się <strong>"OK, możemy to zrobić, akurat mam czas" </strong></p> <p>Wiem, że prawdopodobnie masz już dosyć: </p> <li>Ciągłego <strong>chaosu w Twoim życiu, gubienia rzeczy i spóźniania się na spotkania; </strong> </li><li>Ciągłego zapracowania, bolących pleców i <strong>pracy, która śni Ci się przed zaśnięciem;</strong> </li><li>Patrzenia na swoje dzieci tylko wtedy, gdy albo idą spać, albo już wstają; </li><li>Rezygnowania z odpoczynku na rzecz zapracowania, które nie przynosi takich efektów, jakbyś chciał. <p><strong>Poznaj źródło większości niepowodzeń w naszym życiu </strong></p> <p>Często nie zdajemy sobie nawet sprawy z faktu, że <strong>brak organizacji swojego czasu tak naprawdę rujnuje nasze życie. </strong>Gdy wpadniesz w wir zapracowania i pozwolisz na to,  że to inni organizują Twój czas, to jest to pierwszy krok do tego, aby rzeczywiście nie mieć czasu i dodatkowo wpędzać się w jeszcze większy życiowy chaos. </p> <p><strong>Przerażający i bardzo powszechny mit na temat czasu </strong></p> <p>Jeżeli czujesz, że chcesz zmienić to w swoim życiu, to ujawnię Ci że największym błędem, jaki może popełnić człowiek, jest przeświadczenie, że możemy mieć wpływ na czas. Bzdura. Nie wierz, gdy ktoś mówi Postaram się zorganizować trochę czasu. Jedyne, co może zrobić ta osoba, to <strong>zrobić coś ze sobą i ze swoim życiem. </strong></p> <p>Żeby realnie stać się panem swojego życia, musisz zrobić te kilka kroków! </p> </li><li>nauczyć się jak podejmować słuszne decyzje, </li><li>eliminować złodziei czasu, </li><li><strong>pożegnać w swoim życiu wampiry emocjonalne. </strong>Mówię serio jeżeli chcesz żyć pełnią życia, zbierz wszystkie znane Ci emocjonalne wampiry i nadmierne gaduły - zabierz ich do lasu i powiedz, że tu jest ich miejsce. Nie w Twoim życiu czy biurze. </li><li>nauczyć się i<strong> docenić siłę odpoczynku.</strong> <h1>Jak często zapraszasz złodziei, aby okradli Twój dom?</h1> <p>Jeżeli myślisz, że masz przed sobą kolejną książkę na temat zarządzania czasem, to powiem Ci, że do końca tak nie jest. Ta książka odpowie Ci na pytanie, co mam zrobić, jeżeli nie mam czasu? Autor wskaże Ci, z czego masz zrezygnować i co wyeliminować w swoim życiu, aby Twoje życie było naprawdę Twoją własnością. <strong>Po co Ci lokatorzy, którzy wypełniają każdy zakamarek Twojego życia, nie płacąc czynszu? </strong></p> <p>Czy wyobrażasz sobie, że codziennie w nocy <strong>SIEDMIU zamaskowanych złodziei</strong> wchodzi do Twojego mieszkania i wynosi najcenniejsze rzeczy i rodzinne pamiątki? Po sekundzie zaczęlibyśmy krzyczeć i wezwalibyśmy policję. <strong>A co ty robisz ze złodziejami Twojego czasu? </strong>Znam chyba odpowiedź… Domyślam się, że jeszcze nic. Chcę Cię zdenerwować, niczego bardziej nie pragnę jak tego, żeby w Twojej głowie powstała nieprzyjemna myśl: nie chcę już żeby ktokolwiek okradał mnie z mojego życia. </p> <h1>Oto SIEDMIORO bezwzględnych złodziei czasu, których nauczysz się obezwładniać</h1> <p>1. Rozmowy telefoniczne</p> <p>2. Gaduły i wampiry emocjonalne</p> <p>3. Korki uliczne</p> <p>4. Znalezienie miejsca parkingowego </p> <p>5. Spotkania</p> <p>6. Zepsute maszyny i wadliwe mechanizmy</p> <p>7. Długie kolejki</p> <p>Mimo że lista jest długa, to z pomocą autora książki, <strong>Bena Wisleya,</strong> dowiesz się, jak wyeliminować ze swojego życia te negatywne zjawiska. Wiesz, dlaczego tak mocno w to wierzę? Bo walka toczy się o Twoje życie, potraktuj je jak pamiątkę rodzinną otrzymaną od Twoich rodziców i po prostu nie pozwól ukraść sobie już ani minuty. </p> <p>Pozwól, żeby ta książka była Twoim trenerem nowego, lepiej zorganizowanego życia. Życia, w którym masz więcej czasu dla siebie i bliskich oraz możesz robić to, za czym tęsknisz. Jeżeli będziesz wracać do tej publikacji, istnieje duże prawdopodobieństwo, że </p> </li><li><strong>poprawisz stan swoich finansów, robiąc tylko to, co właściwe i korzystne dla Ciebie, </strong>a nie to, co każą Ci złodzieje Twojego czasu,  </li><li>uzdrowisz relacje z bliskimi, gdy <strong>zaoszczędzony czas poświęcisz swojej rodzinie,</strong> </li><li>zdobędziesz uznanie, gdy <strong>znów zajmiesz się swoim hobby, </strong>na które do tej pory nie udawało Ci się znaleźć czasu, </li><li>odkryjesz, ile fascynujących rzeczy jesteś w stanie zrobić w czasie, którego jeszcze nie dawno wydawało Ci się, że masz za mało.  <p><strong>Jak przestać odkładać wszystko na później </strong></p> <p>W przytoczonym fragmencie książki widać, jak autor w kilku wersach potrafi pokazać Ci, jak łatwo rozwiązać najbardziej palące problemy w gospodarowaniu swoim czasem. </p> <p><em>Listy tygodniowe i miesięczne lepiej po prostu powiesić w widocznym miejscu, niż nosić je ze sobą. A teraz coś, o czym powinieneś zawsze pamiętać: <strong>lista tygodniowa to nie jest lista zadań do wykonania w ostatnim dniu danego tygodnia, zaś lista miesięczna to nie jest lista zadań do wykonania pod koniec miesiąca.</strong> Celowo napisałem to pogrubioną kursywą, ponieważ wbrew pozorom tak właśnie robi większość ludzi. Jeżeli zadanie ma być zrealizowane na koniec miesiąca, to oczywiście 30 dnia danego miesiąca większość z nas się za nie zabiera. </em></p> <p>Jeżeli już w tym momencie dostrzegasz potencjał tej książki, to przejdź od razu do formularza zamówienia <strong>i zacznij organizować swoje życie na zdrowych zasadach. </strong></p> <h1>Oto, co konkretnie znajdziesz w książce pt. "Złodzieje czasu":</h1> </li><li>Dowiesz się<strong>, ile czasu mamy realnie do wykorzystania każdego dnia. </strong> </li><li>Poznasz <strong>skuteczne taktyki eliminowania złodziei czasu.</strong> </li><li>Poznasz <strong>techniki organizowania pracy w biurze.</strong> </li><li>Odkryjesz, dlaczego warto stosować listy rzeczy do zrobienie i dowiesz się, <strong>co pomoga w dotrzymywaniu terminów.</strong> </li><li>Dowiesz się,<strong> jak wykonać dwa razy więcej czynności nich dotychczas, </strong>bez wygospodarowywania dodatkowej puli czasu.  </li><li>Dowiesz się, dlaczego <strong>Ty także jesteś "kunktatorem" </strong> <h1>Pożegnaj się z mitami na temat organizacji czasu</h1> <p>Jeżeli ta książka znajdzie się już na Twojej półce i często będziesz po nią sięgać, musisz mieć świadomość, że pożegnasz się z wieloma mitami dotyczącymi zarządzania czasem. Jeżeli więc jesteś przyzwyczajony do nawyków i mitów, które powodują, że wiecznie nie masz czasu, po prostu opuść tę stronę. Ta książka obala miedzy innymi takie mity jak</p> <h1>Mit #1 </h1> <p><strong>Mówisz "Nie mam czasu..."– </strong>często zastanawiam się, czy w obecnych czasach nie używamy tego sformułowania częściej niż słowa dzień dobry. Jest to bardzo niebezpieczny mit, już za chwilę dowiesz się, że masz bardzo dużo czasu, ale albo <strong>ktoś inny Ci go kradnie, albo przepuszczasz go jak pieniądze w kasynie. </strong></p> <h1>Mit #2 </h1> <p><strong>Mówisz "Nie umiem zarządzać swoim czasem..." </strong>– z książki dowiesz się, że potrafisz zarządzać czasem, ale robisz to jedynie w momencie, gdy do zakończenia danego zadania został Ci ostatni dzień, ostatnia godzin czy ostatnie 15 minut. Umiesz zarządzać czasem, tylko robisz to zbyt rzadko. </p> <h1>Mit #3</h1> <p><strong>Mówisz "Muszę czekać, nie da się tego przeskoczyć..." </strong>Wiesz, czym jest tak naprawdę bezczynność? Według mnie to brak możliwości robienia tego, co się chce robić w danym momencie. Problem tkwi w tym, że to „nie mogę” zamieniłbym na "wydaje mi się, że nie mogę". Tak naprawdę jest to beznadziejny mit. Gdy stoisz w korku, możesz się uczyć, gdy stoisz w kolejce, możesz czytać gazetę....uwierz, możesz robić dwie rzeczy na raz. </p> <p><strong>Kupić trochę czasu... </strong></p> <p>Pewien angielski milioner powiedział kiedyś, że gdy zaczynał jako młody chłopiec od sprzedawania warzyw na bazarze, sam zrozumiał, że gdy wstanie 2 godziny wcześniej niż swoi rówieśnicy i pójdzie spać dwie godziny później, to niezależnie od lat życia <strong>będzie żył dłużej i zrobi w życiu więcej. </strong>Miał rację, stał się milionerem, zwiedził prawie cały świat i jest szczęśliwym człowiekiem, który wie o tym, że nie można kupić czasu, można go jedynie mądrze zagospodarować. </p> <h1>Dlaczego masz wierzyć, że po tygodniu możesz mieć więcej czasu na wszystko?</h1> <p>Rachunek jest prosty. Jeżeli poświęcisz jeden tydzień i z ołówkiem w ręku wypiszesz, co robisz - minuta po minucie - okaże się, że <strong>połowa Twojego dnia to rzeczy, czynności i rozmowy, bez których spokojnie możesz żyć. </strong>Musisz znać miażdżącą prawdę, że nie brak czasu jest Twoim problemem, a sposób, w jaki myślisz i podejmujesz decyzje. </p> <h1>CZAS na decyzję. Czy może potrzebujesz WIĘCEJ CZASU? </h1> <p>Pamiętaj, że ta książka nie zrobi nic za Ciebie, nie da Ci więcej czasu z niczego. Może jednak nauczyć Cię, jak zmienić swoje nawyki, żeby stać się szczęśliwym człowiekiem, który ze spokojem gospodaruje swoim czasem tak efektywnie, że starcza mu go na wszystko. Jeżeli masz dosyć chaosu w swoim życiu, po prostu to zmień. <strong>Zacznij od dzisiaj, ta książka może być pierwszym krokiem! </strong></p>  </li>

1

Jeśli to ma być w Javie to działania na ciągach znaków nie powinny być problemem, można do tego wykorzystać gotowe funkcje i napisać coś takiego:


 //zakładam ze znacznik konczy się klasycznie : </znacznik>
    public static String usunZnacznikBezZawartosci(String skadUsun, String znacznik) {
        skadUsun = skadUsun.replaceAll(znacznik, "");
        znacznik = znacznik.replace("<", "</");
        skadUsun = skadUsun.replaceAll(znacznik, "");
        return skadUsun;

    }

    //takżę forma klasyczna <znacznik>zawartosc</zawartosc>
    public static String usunZnacznikzZawartoscia(String skadUsun, String znacznik) {
        String endznacznik = znacznik.replace("<", "</");
        while (skadUsun.contains(znacznik)) {
            skadUsun = skadUsun.replace(skadUsun.subSequence(skadUsun.indexOf(znacznik), skadUsun.indexOf(endznacznik) + endznacznik.length()), "");
        }
        return skadUsun.replaceAll("<strong>", "");
    }

    //np. <img>
    public static String usunZnacznikJednoznacznikowy(String skadUsun, String znacznik) {
        znacznik = znacznik.replace(">", "");
        while (skadUsun.contains(znacznik)) {
            skadUsun = skadUsun.replace(skadUsun.subSequence(skadUsun.indexOf(znacznik), skadUsun.indexOf(">") + 1), "");
        }
        return skadUsun.replaceAll("<strong>", "");
    }

Wtedy poniższy kod:

 
        String test = new String("<strong>jeden</strong><li>dwa</li><img src='testgfdgdf'> Tekst<input submit='test'>");
        test = usunZnacznikBezZawartosci(test,"<strong>");
        test = usunZnacznikzZawartoscia(test,"<li>");
        test = usunZnacznikJednoznacznikowy(test,"<img>");
        test = usunZnacznikJednoznacznikowy(test,"<input>");
        System.out.println(test);

Wyswietli:

jeden Tekst
1

Tylko po co sie tak męczyć ? użyj do tego gotowej biblioteki
http://jsoup.org/

a jeżeli robisz to np. na androidzie to masz w SDK klasę HTML która zrobi to za Ciebie też

pzdr

0

To jest bardzo duży projekt, a treści jak widać też nie małe, więc zdecydowałem się na użycie Jsoup. Poczytałem trochę i już wiem jak tego używać. Upraszczając, Stworzyłem White listę ze znacznikami które zostawiam i przy setowaniu na encje, podpinam jsoup.getTEKST.

0

Wystąpiło dziwne zjawisko. po użyciu metody Jsoup.clean(desc, whiteList()) na stringu, gdzie np wykrył dwie spacje obok siebie, drugą zaczął zastępować   np w


Expected :"Kodeks cywilny. Komentarz" pod red. prof. E. Gniewka jest dziełem zbiorowym szkoły wrocławskiej. Opracowany został  jako wydanie jednotomowe uwzględniające najnowsze zmiany orzecznictwa i doktryny.
Actual   :"Kodeks cywilny. Komentarz" pod red. prof. E. Gniewka jest dziełem zbiorowym szkoły wrocławskiej. Opracowany został &nbsp;jako wydanie jednotomowe uwzględniające najnowsze zmiany orzecznictwa i doktryny.


można w jakiś sposób dodać wyjątek by spacji w ilości większej niż 1 obok siebie, nie zastępował   a także również nie skracał ,tylko zostawiał tak jak jest ?

0

spróbuj

replace("\u00a0", "")
0

A jest możliwość dodanie tego jakoś do


 /** Biała lista akcpetowalnych tagów html w opisach asortymentu **/
    private static Whitelist whitelist() {
        return new Whitelist()
                .addTags("b", "i", "u",  "ul", "li", "ol", "p", "cite", "sub", "sup", "strike",  "strong", "small", "pre" );
    }
0

Dobra skończyło się na replace. Chciałbym żeby Jsoup w ogóle nie brał pod uwagę spacji, Wg nie zwracał uwagi na to że jest kilka spacji. Chciałbym żeby je zostawiał.

W tym momencie robie to tak:

 public static String cleanHtmlText(String text) {
        String processedText = Jsoup.clean(text, whitelist());
        return processedText.replaceAll("&nbsp;", " ");
    }

   /** Biała lista akcpetowalnych tagów html w opisach asortymentu **/
    private static Whitelist whitelist() {
        return new Whitelist()
                .addTags("b", "i", "u",  "ul", "li", "ol", "p", "cite", "sub", "sup", "strike",  "strong", "small", "pre");
    }
0

Zawsze w ostateczności pozostaje regex albo ręczne parsowanie. Nie słuchaj tych co mówią że regexem się nie parsuje htmla, ja parsuje od lat html i xml regexem i nawet raz się nie zdarzyło, żeby coś wyszło źle.

0
Altaro napisał(a):

Dobra skończyło się na replace. Chciałbym żeby Jsoup w ogóle nie brał pod uwagę spacji, Wg nie zwracał uwagi na to że jest kilka spacji. Chciałbym żeby je zostawiał.


No i Jsoup nie rusza spacji. Zostawia je. Ten śmieszny znaczek który dodaje to jest jak sam zauważyłeś wcześniej twarda spacja HTML-owa
0
wojciechmaciejewski napisał(a):
Altaro napisał(a):

Dobra skończyło się na replace. Chciałbym żeby Jsoup w ogóle nie brał pod uwagę spacji, Wg nie zwracał uwagi na to że jest kilka spacji. Chciałbym żeby je zostawiał.

> 
> No i Jsoup nie rusza spacji. Zostawia je. Ten śmieszny znaczek który dodaje to jest jak sam zauważyłeś wcześniej twarda spacja HTML-owa




Z tym że nie dzieje się tak jak mówisz. za jednym razem jest jakiś biały znak i dodaje mi twardą spację, a za drugim razem, kiedy robię  w  intelij test np ".     ." i jako wynik chce taki sam (" .     .") to jsoup skraca mi to do ". .", więc Jsoup.clean rusza spację w takim razie. Na przykład taki test : 

```java

 @Test
    public void testCheckIfRealDesctiptionIsCorrectlyTheSameLength2() throws Exception {
        String result = TextUtil.cleanHtmlText(".               .");
        String expected = ".               .";
        Assert.assertEquals(expected, result);
    }

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