Avatar billede davidfossil Nybegynder
02. januar 2005 - 15:40 Der er 6 kommentarer og
1 løsning

Stryge næsten alle HTML-tags fra en streng

Jeg sidder og lusker med noget CMS på et website, hvor nogle editors skal have mulighed for at ændre indeholdet af nogle HTML-sider. Til det bruger jeg en komponent jeg har fundet på nettet (ASP.NET) til at tage imod indtastninger, med mulighed for at formattere teksten en smule.

Alt i alt virker denne løsning ret godt, problemet opstår først når folk copy/paster indhold ind. Kommer der fx content fra Word ligner den kode der bliver gemt, noget der er løgn.

Efter at have kigget lidt på det, er jeg noget frem til at jeg ønsker mig en reg. exp. der kan følgende:

1. Slette alle HTML-tags, som jeg ikke excpilit har givet lov til (fx "p", "b", "i"). Alle andre skal altså erstattes med ingenting i en replace.

2. Fjerne alle attributes fra alle html tags, så "<p style=xxx>" bliver til "<p>". Igen forestiller jeg mig at man kan replace med en tom streng.

Om der skal foretages én eller to replaces er sådan set ligemeget. Hvis nogen derude kan skrive den/de rigtige reg. exp. sætninger er jeg meget tilfreds :)
Avatar billede roenving Novice
04. januar 2005 - 01:37 #1
Lidt skitse-agtigt:

var txt = "Dit pastede html";
var reg = /(<[^pbi][^>]*>)/ig;
txt = txt.replace(reg,"");
var reg2 = /<\S+([^>]*)>/g;
txt = txt.replace(reg2,"");
Avatar billede davidfossil Nybegynder
05. januar 2005 - 09:18 #2
Den første var jeg også selv nået frem til, men hvordan får du den til at tage imod tags der er længere end én char? (ex <table>, <tr>)

Jeg forstår slet ikke den anden reg. exp., men den burde stryge alle attributes?
Avatar billede roenving Novice
05. januar 2005 - 17:43 #3
\S betyder ikke-whitespace, som der skal være en eller flere af, bagefter det må der (grupperet !-) komme hvadsomhelst men ikke >, som så _skal_ være bagefter ...

-- men hvis du mener, at du giver lov til f.eks. p, b, i og ul-tags, men ikke andre kan du f.eks.

var txt = "Dit pastede html";
var reg = /<([^pbi]|ul)[^>]*>/ig;//bemærk tilføjelsen af |ul og flytningen af paranteserne !-)
txt = txt.replace(reg,"");
var reg2 = /(<\S+)([^>]*)>/g;//også her ændret !-)
txt = txt.replace(reg2,"$1>");
Avatar billede davidfossil Nybegynder
08. januar 2005 - 23:06 #4
Jeg kan ikke lide den første expression. Hvad hvis der kommer et tag som starter med et P efterfulgt af noget andet?

Mit ønske til søgningen:

Vi søger efter tegnet:
<
efterfulgt af hvad som helst andet end
(p|h1|b|i|table|tr|td)
efterfulgt af enten
et space og x antal karakterer samt et >
eller blot et
>

Er du med? Jeg kan ikke helt selv se hvordan jeg skal kringle det...
Avatar billede davidfossil Nybegynder
30. marts 2006 - 22:08 #5
roenving : Det spørgsmål blev vist aldrig rigtig afklaret. Du fik dog hjulpet mig på vej, og du må meget gerne smide et svar så jeg kan lukke af :)
Avatar billede roenving Novice
31. marts 2006 - 15:47 #6
Oki '-)
Avatar billede roenving Novice
31. marts 2006 - 16:13 #7
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester