Avatar billede mini-me Nybegynder
08. oktober 2008 - 12:49 Der er 5 kommentarer og
1 løsning

Søg og ersat

Hej,

Jeg får et post fra et textfelt hvor der er noget html kode i. I den html kode er der nogle <img tags skal erstattes med en funktion.

Nedenstående virker som sådan også fint... problemet er hvis jeg har flere <img tags som skal ersattes, den erstatter kun den første den støder på.

Hvordan render jeg hele textfeltet igennem?


        html = Request.Form("inpContent")
       
        startpos = InStr(html, "!moduleStart!")
        stoppos = InStr(html, "!moduleEnd!")
       
        ' replace this tring with modulefunction string
        sReplacer = Mid(html, startpos+13, stoppos-startpos-13)
        sReplaceText = "<img alt=""!moduleStart!"&sReplacer&"!moduleEnd!"" src=""/admin/editor/scripts/module.gif"" />"
        ' find streng mellem start og stop
        sModuleFunction = "<% call " & sReplacer & "%" & ">"
       
        sNewHTML = replace(html,sReplaceText,sModuleFunction)
Avatar billede dk_akj Nybegynder
08. oktober 2008 - 13:03 #1
Hvad med at loope ?

do
  startpos = InStr(html, "!moduleStart!")
        stoppos = InStr(html, "!moduleEnd!")
       
        ' replace this tring with modulefunction string
        sReplacer = Mid(html, startpos+13, stoppos-startpos-13)
        sReplaceText = "<img alt=""!moduleStart!"&sReplacer&"!moduleEnd!"" src=""/admin/editor/scripts/module.gif"" />"
        ' find streng mellem start og stop
        sModuleFunction = "<% call " & sReplacer & "%" & ">"
       
        sNewHTML = replace(html,sReplaceText,sModuleFunction)


loop until startpos = 0

//akj
Avatar billede dk_akj Nybegynder
08. oktober 2008 - 13:04 #2
sNewHTML = replace(html,sReplaceText,sModuleFunction) skal nok ændres til
html = replace(html,sReplaceText,sModuleFunction)
ellers får du vist aldrig hold på loopet igen.

//akj
Avatar billede mini-me Nybegynder
08. oktober 2008 - 13:09 #3
Microsoft VBScript runtime error '800a0005'

Invalid procedure call or argument: 'Mid'
Avatar billede mini-me Nybegynder
08. oktober 2008 - 14:49 #4
Jeg har prøvet mig lidt frem med regexp... det vil hellere ikke rigtig...

    webSiteContent = Request.Form("inpContent")
       
        Set re = New RegExp
        re.Global = True
        re.IgnoreCase = True
        re.Pattern = "!moduleStart!([\s\S]+?)!moduleEnd!"
       
        Set matches = re.Execute(webSiteContent)
       
        oldindex = 0
   
        For Each m In matches
            ' udskriv tekst før match
            Response.Write Mid(websiteContent, oldindex+1, m.FirstIndex-oldindex)
            ' kald funktion
            Execute(m.SubMatches(0))
            oldindex = m.FirstIndex + m.Length
        Next
           
        Response.Write Mid(webSiteContent , oldindex+1)
Avatar billede mini-me Nybegynder
08. oktober 2008 - 15:46 #5
dk_akj prøv at smid et svar så lukker jeg den her.

Jeg tror det smarteste vil være at bruge regExp, og har derfor oprettet et spørgsmål som går mere målrettet derpå.
Avatar billede mini-me Nybegynder
28. april 2009 - 17:28 #6
Intet svar - lukker.
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