Usuwanie tagów HTML
Usuń tagi HTML z kodu lub treści strony. Zachowaj czysty tekst, opcjonalnie dekoduj encje HTML. Szybkie narzędzie online. Bezpłatnie.
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćUsuwanie tagów HTML – konwersja HTML na czysty tekst
Usuwanie tagów HTML (HTML stripping) przekształca kod HTML na czysty tekst – przydatne przy przetwarzaniu treści web, migracjach CMS, przygotowywaniu tekstu do analizy NLP lub czyszczeniu danych. Narzędzie usuwa tagi, opcjonalnie dekoduje encje HTML (& → &, → spacja) i normalizuje białe znaki.
Jak działa usuwanie tagów HTML
Algorytm: znajdź i usuń wszystko między < a > (regex lub parser DOM). Regex (prosty): /<[^>]+>/g. Parser DOM (bezpieczny): utwórz element, przypisz innerHTML, odczytaj textContent. Regex problemy: CDATA, komentarze HTML, zagnieżdżone cudzysłowy w atrybutach. Dla produkcji: zawsze parser DOM lub dedykowana biblioteka (DOMPurify, Sanitize.js).
Encje HTML do dekodowania
& → &. < → <. > → >. " → ". ' → '. → spacja nierozdzielająca (U+00A0). © → ©. € → €. Numeryczne: © → © (decimal). © → © (hex). Narzędzie dekoduje encje po usunięciu tagów, zwracając naturalnie czytelny tekst.
Zastosowania
NLP i analiza tekstu: modele wymagają czystego tekstu bez HTML. Web scraping: BeautifulSoup .get_text(). Migracja treści: Drupal/WordPress export → czyść HTML. Porównywanie wersji: diff dwóch stron bez szumu tagów. Przeszukiwanie pełnotekstowe: Elasticsearch indeksuje czysty tekst. Email marketing: konwersja HTML emaila na plain text fallback.
Zachowanie struktury przy usuwaniu
Problem:
Akapit 1
Akapit 2
→ "Akapit 1Akapit 2" (bez spacji). Rozwiązanie: zamień </p>, </div>, <br> na \n przed usunięciem tagów.Jak przebiega konwersja krok po kroku
Konwersja przebiega w dwóch niezależnych etapach, które łatwo pomylić, a które odpowiadają za różne typy błędów. Pierwszy etap to skanowanie kodu i wyznaczanie granic znaczników. Parser przechodzi przez tekst znak po znaku i utrzymuje stan: jesteśmy wewnątrz znacznika czy poza nim. Znacznik otwiera znak <, zamyka >, a wszystko, co leży poza tymi nawiasami, trafia do bufora tekstowego. Parser rozpoznaje jednak również konstrukcje łamiące ten prosty podział: komentarze zaczynające się od <!--, sekcje CDATA, deklaracje typu <!DOCTYPE, instrukcje przetwarzania oraz atrybuty zawierające znak > wewnątrz cudzysłowu, na przykład <a title='a > b'>. Właśnie na takich przypadkach wykłada się dopasowanie wzorcem regularnym, które nie zna kontekstu cudzysłowów ani zagnieżdżeń.
Drugi etap to dekodowanie encji i normalizacja białych znaków. Tekst zebrany w buforze zawiera jeszcze zapisy zastępcze, takie jak czy &, i dopiero tutaj zamieniane są one na właściwe znaki. Kolejność ma znaczenie: dekodowanie wykonuje się po usunięciu znaczników, bo encja < reprezentuje znak mniejszości, który po odszyfrowaniu stałby się potencjalnym początkiem znacznika. Odwrotna kolejność tworzyłaby fałszywe znaczniki, które trzeba by usuwać drugi raz. Na końcu następuje normalizacja: ciągi spacji, tabulatorów i znaków nowej linii są redukowane do pojedynczych separatorów, a tekst przycinany z obu brzegów.
Trzeci element to decyzja o strukturze. Zanim znaczniki zostaną wycięte, narzędzie może oznaczyć miejsca po znacznikach blokowych i po elementach listy, wstawiając w ich miejsce separator. Dzięki temu akapity i pozycje listy nie zlewają się w jeden ciąg, a wynik nadaje się do dalszego przetwarzania bez ręcznego poprawiania. Gdy opcja zachowania podziałów jest wyłączona, wszystkie separatory są traktowane jak zwykłe białe znaki i tekst zostaje sklejony w jednej linii.
Przykład: fragment artykułu z listą i komentarzem
- Wejście. Bierzemy fragment kodu: <div class='lead'><h2>Kawa</h2><p>Cena: 12,50 zł & rabat <strong>10%</strong></p><ul><li>Arabica</li><li>Robusta</li></ul><!-- stopka --></div>.
- Rozpoznanie granic znaczników. Parser pomija wszystkie konstrukcje od < do > i do bufora tekstowego trafiają tylko fragmenty: Kawa, Cena: 12,50 zł & rabat 10%, Arabica, Robusta.
- Obsługa komentarza. Sekwencja <!-- stopka --> jest usuwana w całości razem z zawartością, więc ani słowo stopka, ani same nawiasy nie pojawiają się w wyniku.
- Wstawienie separatorów. Przy włączonym zachowaniu podziałów znaczniki <h2>, <p> i <div> zamieniane są na znak nowej linii, a każdy <li> na nową linię z punktorem przed treścią pozycji.
- Dekodowanie encji. Zapis staje się zwykłą spacją, a & zwykłym znakiem &, po czym następuje redukcja powtarzających się spacji i przycięcie tekstu.
- Wynik. W pierwszym wierszu znajduje się Kawa, w drugim Cena: 12,50 zł & rabat 10%, a w dwóch kolejnych Arabica i Robusta poprzedzone punktorem. Nagłówek nie różni się już formatowaniem od pozostałych linii, a komentarz zniknął bez śladu.
Co dzieje się z poszczególnymi konstrukcjami
| Konstrukcja w kodzie | Działanie narzędzia | Efekt w czystym tekście |
|---|---|---|
| <div>, <p>, <br> | zamiana na znak nowej linii przy włączonym zachowaniu podziałów | akapity rozdzielone wierszami |
| <li> | wstawienie nowej linii i punktora przed treścią pozycji | lista punktowana w tekście |
| <h1> – <h6> | tekst nagłówka plus znak nowej linii | nagłówek jako osobny wiersz |
| <script>, <style> | usunięcie znacznika razem z całą zawartością | brak kodu JavaScript i CSS w wyniku |
| <!-- komentarz --> | usunięcie całości, także tekstu wewnątrz | brak notatek technicznych i zakomentowanych fragmentów |
| <a href='...'> | usunięcie znacznika, zachowanie tekstu odnośnika, pominięcie adresu | sam opis linku, bez adresu URL |
| encja | zamiana na zwykłą spację | brak twardych spacji blokujących zawijanie wiersza |
| encje numeryczne, np. © i © | zamiana na znak o wskazanym kodzie Unicode | symbol zamiast kodu liczbowego |
Jak używać narzędzia, żeby wynik był użyteczny
- Najpierw zdecyduj, czy układ ma znaczenie. Jeśli wynik ma być jednym ciągiem do dalszej analizy, wyłącz zachowanie podziałów i pozwól zredukować białe znaki. Jeśli wklejasz tekst do dokumentu, zostaw separatory bloków, bo bez nich akapity i pozycje listy zleją się w jedną linię.
- Przy dużych plikach usuwaj znaczniki poza przeglądarką. Narzędzie w przeglądarce trzyma cały dokument w pamięci, co przy bardzo obszernych eksportach bywa odczuwalne. Dla hurtowej obróbki wygodniej wywołać ten sam mechanizm skryptem po stronie serwera.
- Rozróżniaj usuwanie znaczników od sanityzacji. Stripping nie chroni przed niebezpiecznym kodem, bo po prostu go wycina. Jeśli tekst ma wrócić na stronę, przepuść go przez osobny mechanizm czyszczenia lub zamień znaki <, > i & na encje.
- Porównaj oba warianty normalizacji. Ta sama treść raz da zwarty blok tekstu, raz zachowa układ linii. Zestawienie obu wyników szybko pokazuje, czy w źródle nie ma pustych znaczników blokowych generujących zbędne wiersze.
- Przechowuj wynik w UTF-8. Po dekodowaniu encji w tekście pojawiają się gotowe znaki Unicode, w tym polskie litery i symbole walut. Zapis w innym kodowaniu może je uszkodzić.
Czego ta konwersja nie obejmuje
- Treść generowana przez JavaScript. Parser widzi wyłącznie to, co znajduje się w pobranym kodzie. Tekst wstawiony do strony dynamicznie, po jej wczytaniu, nie trafi do wyniku, choćby był widoczny w przeglądarce.
- Informacje zapisane w atrybutach. Tekst z title, alt czy value znika razem ze znacznikiem. Jeśli jest potrzebny, trzeba go wyciągnąć osobnym krokiem przed usunięciem tagów.
- Układ tabel i złożonych komponentów. Z komórek powstaje ciąg tekstu, a przypisanie wartości do kolumn zależy wyłącznie od kolejności znaczników w źródle. Przy tabelach z nagłówkami i scalonymi komórkami wynik bywa mylący.
- Niepoprawny HTML i encje bez średnika. Parser stosujący model DOM naprawia błędy po swojemu i domyka znaczniki według własnych reguł, a zapis typu   bez średnika bywa interpretowany inaczej niż oczekiwano. Wynik może więc różnić się od tego, co widać w przeglądarce.
Najczęstsze pytania
Jak usunąć tagi HTML w PHP?
strip_tags($html): usuwa tagi HTML, opcjonalnie zachowuje wybrane. strip_tags($html, '
') zachowa p i br. html_entity_decode() po strip_tags() do dekodowania encji. Dla bezpieczeństwa: htmlspecialchars() do wyświetlania, DOMDocument do parsowania. Nie używaj regex do walidacji HTML w PHP – zbyt wiele edge cases.
Jak usunąć tagi HTML w Python?
BeautifulSoup: soup = BeautifulSoup(html, "html.parser"); soup.get_text(). lxml: lxml.html.fromstring(html).text_content(). Regex (ostrożnie): import re; re.sub("<[^>]+>", "", html). Markdownify: konwersja HTML na Markdown (zachowuje strukturę). html2text: HTML na plain text z zachowaniem formatowania.
Jak usunąć tagi HTML w JavaScript?
DOM: document.createElement("div"); el.innerHTML = html; return el.textContent. DOMParser: new DOMParser().parseFromString(html, "text/html").body.textContent. Regex: html.replace(/<[^>]*>/g, ""). Striptags (npm): bezpieczna biblioteka. Sanitize-html (npm): usuwa niebezpieczne tagi, zachowuje wybrane.
Czy usuwanie tagów HTML jest bezpieczne?
Ryzyko: po usunięciu tagów = "alert(xss)" – tekst, nie kod. Ale: jeśli wynik trafia z powrotem do HTML bez escaping = XSS. Bezpieczna praktyka: strip tags → encode result (htmlspecialchars) przed wyświetleniem w HTML. Nie ufaj wyniku jako bezpiecznemu HTML.
Jak zachować formatowanie przy konwersji HTML na email?
HTML email → plain text fallback: zamień
na \n,
na \n\n, tekst na *tekst*, tekst na "tekst (URL)". Biblioteki: Mailchecker, html-to-text (npm), premailer (Ruby). Plain text email: alternatywna wersja MIME multipart/alternative wymagana przez Email on Acid i Litmus.
Czym różni się usuwanie tagów HTML od sanityzacji?
Usuwanie tagów wyprowadza z kodu sam tekst i nie interesuje się tym, czy znaczniki były bezpieczne. Sanityzacja zostawia część znaczników, ale odrzuca te, które mogą być groźne. Do wyświetlania treści w przeglądarce potrzebna jest sanityzacja, do analizy tekstu wystarczy stripping.
Czy narzędzie usunie treść ze znaczników script i style?
Tak. Zawartość tych znaczników nie jest traktowana jako tekst widoczny dla czytelnika, więc znika razem z otoczką i nie zaśmieca wyniku wstawkami kodu. To jeden z powodów, dla których warto używać parsera zamiast prostego wzorca regularnego.
Dlaczego w wynikowym tekście pojawiają się puste wiersze?
Najczęściej odpowiadają za to puste znaczniki blokowe, kilka znaczników <br> obok siebie albo wcięcia między znacznikami w źródle. Opcja normalizacji białych znaków redukuje takie ciągi, ale całkowicie ich nie usuwa, jeśli w kodzie były realne puste elementy.
Czy wynik mogę bezpiecznie wkleić z powrotem na stronę internetową?
Nie bez dodatkowego kroku. Otrzymany tekst jest zwykłym tekstem, ale może zawierać znaki <, > i &, które w kontekście HTML mają znaczenie składniowe. Przed wstawieniem na stronę zamień je na encje albo użyj mechanizmu czyszczenia danych wejściowych.
Co się dzieje z numeracją listy zamówionej?
Znaczniki <ol> i <li> nie niosą w sobie informacji o numerze pozycji, więc po konwersji zostaje sam separator lub punktor, bez odtworzonej numeracji. Jeśli numery są potrzebne, trzeba je dopisać ręcznie lub wygenerować na podstawie kolejności pozycji.
Powiązane narzedzia: formatowanie HTML, koder encji HTML i konwerter HTML na Markdown.