Strip tags   zodpovězená otázka

VB.NET, Regulární výrazy

Jakou používáte funkci na odstranění HTML značek?

Zatím mě napadl tenhle Regexp "<.*?>". Někdo jiný přístup?

P.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím, jak už tu bylo několikrát zmiňováno, nemá cenu cpát regulérní výrazy do všeho. Co kdyby chtěl někdo napsat třeba "Zmáčkněte <ctrl>+<c>". Dost často se používá/používalo psaní konkrétních kláves do lomenejch závorek. Určitě budou i jiný případy.

Na druhou stranu to je třeba optimální řešení. Ale neprůstřelný to rozhodně není, alespoň tento konkrétní případ "<.*?>"

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud někdo do stránky napíše <ctrl>+<c> rovnou a místo znaků <>, které nemají mít tentokrát funkci ohraničení tagu, nepoužije HTML entity &lt; a &gt;, pak stránka není HTML validní.

Obecně můžete použít regexpy k vyházení HTML značek, ale narazíte na několik problémů, které vá jednoduchý regexp neudělá a celé se to výrazně zkomplikuje.

- vystříhání komentářů

- vyházení obsahů značek script, style, title atd. (skripty a styly určitě uživatel vidět nechce)

- a pár dalších nechutností

Pokud máte zaručeno, že stránka nebude mít syntaktické chyby, což většinou zaručit nejde, máte dost velký problém, protože regexp se na tomhle rozbije a nenamatchuje to, co potřebujete.

Dalším problémem je výkon, regexpy jsou už ze svého principu pomalé.

Pokud potřebujete parsovat jednoduché stránky a máte jistotu, že nebudou obsahovat chyby, pak použijte regexpy. Pokud děláte nějaký program stahující stránky z webu a vyhledávající v nich nějaké informace nebo něco podobného, kam vám kdokoliv může podstrčit jakkoliv zprasené HTML, určitě doporučuji spíš použít nějakou knihovnu, např. HTMLAgilityPack. Čtení HTML funguje víceméně stejně jako práce s třídou System.Xml.XmlDocument, která se používá pro čtení XML. Prostě vám to udělá DOM strom, ve kterém se můžete hrabat. Napsat si pak převod HTML na text chce jenom trochu rozmyslet, za kterými značkami se bude zalamovat řádek (i když v původním dokumentu třeba zalomení není):

<li>první</li><li>druhá</li><li>třetí</li>

by se mělo převést na

první
druhá
třetí

atd. To už dá trochu práce, ale není to tak strašné.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

děkuji za tip ohledně HTMLagilityPacku - myslím, že pro parsování HTML stránek jsem doposud neviděl nic lepšího.

Ten regexp jsem spíše myslel jen pro vyházení značek. Aby náhodou uživatel nevložil HTML značky, které by se mohli v prohlížeči interpretovat. Nebo je nahradím za & entity - ještě nevím. Šlo mi jen o bezpečnost a zamezení uživatelům vložit interpretovatelný HTML kód.

Jakým způsobem máte například ošetřeno používání HTML značek v téhle diskuzi?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback