webForumDet fria alternativet

Regexp fråga

ASP

21 svar · 356 visningar · startad av Melea

Medlem sedan juli 20033 147 inlägg
Frågan#1

Hejsan!

har sökt och letat i forumet men inte hittat hur man gör en funktion som tar bort alla < och > taggar som finns innanför [ kod] och [ /kod] taggarna. någon vänlig själ som vill hjälpa mig med detta?

mvh

Medlem sedan nov. 20014 054 inlägg
#2

Re: Regexp fråga

Melea skrev:

Hejsan!

har sökt och letat i forumet men inte hittat hur man gör en funktion som tar bort alla < och > taggar som finns innanför [ kod] och [ /kod] taggarna. någon vänlig själ som vill hjälpa mig med detta?

mvh

alltså tar bort dem helt eller bara gör om dem med Server.HtmlEncode??
I sådana fall:

Function Konvert(svalue)
Dim RegExp
Set RegExp = New RegExp

With RegExp
.Global = True
.IgnoreCase = True
.Pattern = "\[kod\](*.?)[/kod\]"
End With

Konvert = RegExp.Replace(svalue,Server.HTMLEncode("$1"))
End function

Kanske?? :q

Medlem sedan juli 20033 147 inlägg
#3

skulle helst vilja replace'a dem med < och > eftersom jag har annan sorts kod på sidan också.

mvh

Medlem sedan nov. 20014 054 inlägg
#4

Melea skrev:

skulle helst vilja replace'a dem med < och > eftersom jag har annan sorts kod på sidan också.

mvh

det är vad Server.HTMLEncode gör, den ersätter < > med < >, dvs säga så att inga HTML-taggar kan förstöra din kodning!

Medlem sedan juli 20033 147 inlägg
#5

Hm får felmeddelandet:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A139A)
Oväntad kvantifierare

Såhär ser koden ut:

<%
Function textEncode(str)
  str = Replace(str, "'","''")

  Set objRegExp = New regexp
  objRegExp.Global = true
  objRegExp.IgnoreCase = true

  objRegExp.Pattern = "\[kod\](*.?)[/kod\]"
  str = objRegExp.Replace(str,Server.HTMLEncode("$1"))

   textEncode = str

End function
%>

Tacksam för svar

Mvh

Medlem sedan nov. 20014 054 inlägg
#6

Blubber... testa och ändra till (.*) istället för frågetecknet! :OO

Medlem sedan juli 20033 147 inlägg
#7

Hm...

Feltyp:
Körningsfel i Microsoft VBScript (0x800A139B)
Förväntade "]" i reguljärt uttryck

:OO

Medlem sedan dec. 20003 887 inlägg
#8

Du har bara råkat missa en backslash...

objRegExp.Pattern = "\[kod\](*.)\[/kod\]"
Medlem sedan juli 20033 147 inlägg
#9

:OO

Konstigt nog får jag fortfarande:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A139A)
Oväntad kvantifierare

på samma rad som:

objRegExp.Pattern = "\[kod\](*.)\[/kod\]"

Medlem sedan nov. 20014 054 inlägg
#10

Melea skrev:

:OO

Konstigt nog får jag fortfarande:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A139A)
Oväntad kvantifierare

Vilken version på scriptmotorn har du?

Medlem sedan dec. 20003 887 inlägg
#11

Oj... punkten ska ju vara före stjärnan... :)

objRegExp.Pattern = "\[kod\](.*)\[/kod\]"
Medlem sedan juli 20033 147 inlägg
#12

Om du menar webservern så har jag Windows XP IIS5.

Jag fick igång det genom:

<%
Function textEncode(str)
  str = Replace(str, "'","''")

  Set objRegExp = New regexp
  objRegExp.Global = true
  objRegExp.IgnoreCase = true

  objRegExp.pattern = "\[kod\]((.|\n)+?)\[/kod\]"
  str = objRegExp.Replace(str,Server.HTMLEncode("$1"))

  textEncode = str

End function
%>

/Red Det var inget :OO

Medlem sedan nov. 20014 054 inlägg
#13

Det jag menade var vilken version har du på Microsoft Script Motor, vissa regexp brukar inte funka i ex. 5.1

Dvs, då får du reda på script motor..

<% 
response.write scriptenginemajorversion & "." & Scriptengineminorversion 
%>

Men annars mönster

\[kod\](*.?)\[/kod\]

Bör väl funka??

Medlem sedan juli 20033 147 inlägg
#14

Har version 5.6...

Men nu får ni ursäkta min dumhet :)

Står alldeles still i huvet på mig, får inte saken att fungera...
När jag includerar

<%

Function textEncode(str)

  str = Replace(str, "'","''")

  Set objRegExp = New regexp
  objRegExp.Global = true
  objRegExp.IgnoreCase = true

  objRegExp.Pattern = "\[kod\](.*)\[/kod\]"
  str = objRegExp.Replace(str,Server.HTMLEncode("$1"))

  textEncode = str

End function
%>

högst upp på t.ex. kurs_add.asp och kör koden i kurs_add.asp som ser ut såhär:

<!-- #include file="funktioner.asp" -->
<%
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("../db/aspkurs.mdb")

dim strkursnamn, strkategori, strkurs
strkursnamn = Request.Form("kursnamn")
strkategori = Request.Form("kategori")
strkurs = textEncode(Request.Form("kurs"))

sql = " insert into aspkurs(kursnamn, kategori, kurs) " & " values('" & strkursnamn & "','" & strkategori & "','" & strkurs & "') "
Conn.Execute sql,,128

Conn.Close
Set Conn = Nothing

Response.Redirect "../admin.asp?visa=inloggad&kurser=kurs_add&add=kurs"
%>

så händer det ingenting? [ kod] - taggarna står kvar och allt som står där innanför visas inte på kurs.asp där jag skriver ut det genom

<%
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &Server.MapPath("db/aspkurs.mdb")

SQL = "Select * From aspkurs where ID = " & Request.Querystring("kursID") & " "
Set RecSet = Conn.Execute(SQL)
%>

<%=Replace(RecSet("kurs"),vbCrLf,"<br>")%>

<%
Conn.Close
Set Conn = Nothing

Set RecSet = Nothing
%>

Vad gör jag för fel? :OO

Tack på förhand!
Mvh

Medlem sedan juli 20033 147 inlägg
#15

Ingen? *känner mig dum* :OO

Medlem sedan nov. 20014 054 inlägg
#16

Vad händer om du flyttar TextEncode från innan inläggningen i databasen till efter när du skriver ut!

<%=TextEncode(Replace(RecSet("kurs"),vbCrLf,"<br>"))%>
:q

Medlem sedan juli 20033 147 inlägg
#17

Ingenting, det ända som skrivs ut är [ kod] - taggarna och inte koden mellan taggarna...

<%

Function textEncode(str)

  Set objRegExp = New regexp
  objRegExp.Global = true
  objRegExp.IgnoreCase = true

  objRegExp.Pattern = "\[kod\](.*)\[/kod\]"
  str = objRegExp.Replace(str,Server.HTMLEncode("$1"))

  str = Replace(str, vbcrlf, "<BR>" & vbcrlf) 

  textEncode = str

End function
%>
Medlem sedan juli 20033 147 inlägg
#18

Hm! Fått lite klarhet i det nu ändå men problemet kvarstår.

Jag använder koden när jag hämtar datan från databasen och den ser ut såhär:

<%

Function textEncode(str)

  Set objRegExp = New regexp
  objRegExp.Global = true
  objRegExp.IgnoreCase = true

  objRegExp.Pattern = "\[kod\]([^\[]*)\[/kod\]"
  str = objRegExp.Replace(str, "[ kod]" & Server.HTMLEncode("$1") & "[ /kod]")

  str = Replace(str, vbcrlf, "<BR>" & vbcrlf) 

  textEncode = str

End function
%>

Problemet är att när jag använder koden skriver den bara ut [ kod] och [ /kod] - taggarna, inte innehållet däri.

Står det fel i koden någonstans?

Mvh

Medlem sedan jan. 20032 285 inlägg
#19

Jo, innehållet skrivs visst ut, om du kollar i källan! ;)
Det är bara det att Server.HTMLEncode() inte verkar vilja funka.

Medlem sedan juli 20033 147 inlägg
#20

Precis! Helskumt :OO
Har testat koden på Loopias webserver nu också men det gör ingen skillnad...

290 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
138 ms — deklarationer (db)
0 ms — hämta statistik (cache)
149 ms — hämta tråd, inlägg och bilagor (db)
138 ms — ändringar (db)