Avatar billede janr Nybegynder
02. august 2003 - 01:21 Der er 6 kommentarer

Klip en HTML streng i stykker men afslut alle tags

Hej Eksperter

Jeg sidder med et problem, som har drillet mig længe - måske er der nogen af jer, der kan hjælpe?

Jeg har en lang række artikler formateret med HTML liggende i en database. På en oversigtsside vil jeg gerne vise et kort uddrag af hver artikkel - f.eks. de første 200 tegn. Men hvis jeg blot klipper artiklen over efter 200 tegn med Left(streng,200) så kan jeg ikke være sikker på, at alle html-tags i strengen er afsluttet, hvilet kan skabe store problemer med layoutet af oversigtssiden. Der kan f.eks. let mangle en </p> eller </a>.

Er der nogen af jer, der har et godt foreslag til hvordan jeg kan klippe en streng over efter et bestemt antalt tegn og derefter automatisk får indsat eventuelle manglende slut-tags?
Avatar billede dna Nybegynder
02. august 2003 - 03:45 #1
Det kan vel ikke være så "svært" ... :-)

1. Tag de første 200 tegn
2. Gennemse for <> (Start og slut af HTML)
3. Tilføje alle start tags til en datastruktur
4. Fjerne dem hvis slut-tags findes
5. Til sidst tilføje slut tags til de start tags der findes i din datastruktur med HTML tags.

I teorien er det nemt nok.

dna
Avatar billede -thomas- Nybegynder
02. august 2003 - 09:26 #2
Er det ikke en mulighed bare at fjerne alle html-tags? Tror det andet nemt vil give problemer.
Avatar billede janr Nybegynder
02. august 2003 - 11:20 #3
thomas, jeg vil gerne beholde alle (eller i hvert fald de fleste) html tags.

Dna, ja i teorien lyder det jo nemt, men har du evt. et kodeeksempel, så ville det være endnu nemmere ;-)
Avatar billede jhauge Nybegynder
07. august 2003 - 00:59 #4
Her er en lille funktion baseret på Regular Expressions - den fjerner alle HTML-tags, og afkorter derefter strengen til et valgt antal tegn, og returnerer en streng med det du skal bruge:

Function RemoveHTML(str As String, length As Integer)
    Dim strTmp As String
    Dim rg As New Regex("<[^>]*>")
   
    strTmp = rg.Replace(str, "")
    If Len(strTmp) > length And length <> 0 Then
        strTmp = Left(strTmp, length) & " &hellip;"
    End If
   
    RemoveHTML = strTmp

End Function

Du bruger funktionen ved at skrive:

strTilsiden = RemoveHTML(strFraDB, 200)

.Hauge
Avatar billede jhauge Nybegynder
07. august 2003 - 01:01 #5
Hov sorry - den ovenfor viste er ASP.NET udgave, nedenstående funktion virker i alm. ASP

Function RemoveHTML(str, length)
    Dim strTmp
    Dim RegEx : Set RegEx = New RegExp
   
    RegEx.Pattern = "<[^>]*>"
    RegEx.Global = True
   
    strTmp = RegEx.Replace(str, "")
    If Len(strTmp) > length And length <> 0 Then
        strTmp = Left(strTmp, length) & " ..."
    End If
   
    RemoveHTML = strTmp

End Function
Avatar billede jhauge Nybegynder
07. august 2003 - 01:03 #6
Sorry igen - havde ikke læst dit spørgsmål ordentligt - du ville jo beholde HTML-tags, det har jeg ikke lige en funktion på lager til :(

Jeg undskylder
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