webForumDet fria alternativet

Replace och image width!

17 svar · 556 visningar · startad av paddan

paddanMedlem sedan dec. 2002323 inlägg
#1

har ett litet problem...det är så här jag har denna replace funktionen:

 
Innlegg=.Replace(Innlegg,"<img src=""upload/textbilder/$1"" height="""& getImgHeight("/upload/textbilder/$1")&""" alt=""$1"" class=""text_bild"" />")

Framför allt denna raden ska ni kolla på: height="""& getImgHeight("/upload/textbilder/$1")&"""

jag försöker få utan höjden på det:

getImgHeight funktionen:

Function getImgHeight(img)
Dim myImg, fs
SET fs= CreateObject("Scripting.FileSystemObject")
IF fs.fileExists(Server.MapPath(img)) THEN
SET myImg = loadpicture(Server.MapPath(img))
getImgHeight = round(myImg.height / 26.4583)
SET myImg = nothing
ELSE
getImgHeight=""
END IF
SET fs=Nothing
END Function

men problemmet är att den vill inte...skirver jag namnet på bilden istället för $1 så funkar det...men inte annars...

vad är felet?

Peter SMedlem sedan dec. 20025 484 inlägg
#2
Replace(Innlegg,getref("f"))

function f(r,o,m,a)
 f = "<img src=""upload/textbilder/"& o &""" height="""& getImgHeight("/upload/textbilder/"& o &"") &""" alt="""& o &""" class=""text_bild"" />"
end function
paddanMedlem sedan dec. 2002323 inlägg
#3

Jag förstår inte riktigt ditt svar som du gav mig..kan du förklara lite?

Mvh martin

Peter SMedlem sedan dec. 20025 484 inlägg
#4

Det mest intressanta är först och främst huruvida det fungerade som du tänkt dig.

:)

paddanMedlem sedan dec. 2002323 inlägg
#5

Jag vet inte riktigt var jag ska göra av det..!
Så här ser koden ut från början...

.Pattern="\[bild\]([\w\W]*?)\[/bild\]"
Innlegg=.Replace(Innlegg,"<img src=""upload/textbilder/$1"" width="""& getImgWidth("/maxi/upload/textbilder/$1")&""" alt=""$1"" class=""text_bild"" />")

Men den ger inget värde på widthen...
Jag förstår inte riktigt hur din kod ska kunna fungera här..!

Mvh Martin

Peter SMedlem sedan dec. 20025 484 inlägg
#6

Har du testat den? Jag bifogar ett minimalt exempel som visar hur det kan gå till :)

paddanMedlem sedan dec. 2002323 inlägg
#7

Jag får inte riktigt rätt på det...
jag kanske ska förklara lite mer.
Det är när jag skriver ut en text så ligger det bildnamn i den texten.
Jag hämtar sedan ut bilderna från en speciell mapp.

Hela koden just nu:

<%
	Innlegg = Replace(Server.HTMLEncode(rs("info")),vbCrLf,"<br />")
	With New RegExp
	.Global=True
	.IgnoreCase=True

	.Pattern="\[u\]([\w\W]*?)\[/u\]"
	Innlegg=.Replace(Innlegg,"<h5>$1</h5>")

	.Pattern="\[b\]([\w\W]*?)\[/b\]"
	Innlegg=.Replace(Innlegg,"<strong>$1</strong>")
	
	.Pattern="\[i\]([\w\W]*?)\[/i\]"
	Innlegg=.Replace(Innlegg,"<em>$1</em>")

	.Pattern="\[p\]([\w\W]*?)\[/p\]"
	Innlegg=.Replace(Innlegg,"<div class=""box"">$1</div>")

	.Pattern="\[r\]([\w\W]*?)\[/r\]"
	Innlegg=.Replace(Innlegg,"<em class=""red"">$1</em>")

	.Pattern="\[g\]([\w\W]*?)\[/g\]"
	Innlegg=.Replace(Innlegg,"<em class=""green"">$1</em>")

	.Pattern="\[bl\]([\w\W]*?)\[/bl\]"
	Innlegg=.Replace(Innlegg,"<em class=""blue"">$1</em>")

	.Pattern="\[c\]([\w\W]*?)\[/c\]"
	Innlegg=.Replace(Innlegg,"<p class=""center"">$1</p>")

	.Pattern="\[www\]([\w\W]*?)\[/www\]"
	Innlegg=.Replace(Innlegg,"<a href=""http://$1"" title=""$1"">$1</a>")

	.Pattern="\[list\]([\w\W]*?)\[/list\]"
	Innlegg=.Replace(Innlegg,"<ul class=""text_list""><li>$1</li></ul>")
	
	
	
	dim a
	a = inlegg

	set r = new regexp

	with r
	 .pattern = "\[img](.*?)\[/img]"
	 a = .Replace(a,getref("f"))
	end with

	set r = nothing

	response.write a
		
	function f(r,o,m,a)
	f = "<img src=""upload/textbilder/"& o &""" height="""& getImgHeight("/upload/textbilder/"& o &"") &""" alt="""& o &""" class=""text_bild"" />"
	end function
	
	
	End With
	Response.write(Innlegg)
	%>

Denna koden ger syntax error på function f(r,o,m,a)

Mvh martin

Peter SMedlem sedan dec. 20025 484 inlägg
#8

Skall det inte vara 'Innlegg' nedan

a = inlegg

Istället för att skapa ett nytt RegExp-objekt ('r') kan du fortsätta på det föregående.

Anledningen till felmeddelandet tror jag är att funktioner inte får skapas i ett With-block.

<%
	Innlegg = Replace(Server.HTMLEncode(rs("info")),vbCrLf,"<br />")
	With New RegExp
	    .Global=True
	    .IgnoreCase=True

	    .Pattern="\[u\]([\w\W]*?)\[/u\]"
	    Innlegg=.Replace(Innlegg,"<h5>$1</h5>")

	    .Pattern="\[b\]([\w\W]*?)\[/b\]"
	    Innlegg=.Replace(Innlegg,"<strong>$1</strong>")
	
	    .Pattern="\[i\]([\w\W]*?)\[/i\]"
	    Innlegg=.Replace(Innlegg,"<em>$1</em>")

	    .Pattern="\[p\]([\w\W]*?)\[/p\]"
	    Innlegg=.Replace(Innlegg,"<div class=""box"">$1</div>")

	    .Pattern="\[r\]([\w\W]*?)\[/r\]"
	    Innlegg=.Replace(Innlegg,"<em class=""red"">$1</em>")

	    .Pattern="\[g\]([\w\W]*?)\[/g\]"
	    Innlegg=.Replace(Innlegg,"<em class=""green"">$1</em>")

	    .Pattern="\[bl\]([\w\W]*?)\[/bl\]"
	    Innlegg=.Replace(Innlegg,"<em class=""blue"">$1</em>")

	    .Pattern="\[c\]([\w\W]*?)\[/c\]"
	    Innlegg=.Replace(Innlegg,"<p class=""center"">$1</p>")

	    .Pattern="\[www\]([\w\W]*?)\[/www\]"
	    Innlegg=.Replace(Innlegg,"<a href=""http://$1"" title=""$1"">$1</a>")

	    .Pattern="\[list\]([\w\W]*?)\[/list\]"
	    Innlegg=.Replace(Innlegg,"<ul class=""text_list""><li>$1</li></ul>")
	
	    .Pattern = "\[img](.*?)\[/img]"
	    Innlegg=.Replace(Innlegg,getref("f"))
	End With
	
	Response.write(Innlegg)
	
	function f(r,o,m,a)
	    f = "<img src=""upload/textbilder/"& o &""" height="""& getImgHeight("/upload/textbilder/"& o &"") &""" alt="""& o &""" class=""text_bild"" />"
	end function
	%>
paddanMedlem sedan dec. 2002323 inlägg
#9

Den koden ger också syntax error på funktionen!

Peter SMedlem sedan dec. 20025 484 inlägg
#10

Om det där är all ASP-kod du använder är det inte så konstigt. Parsern borde då klaga på delen med getImgHeight(...).

:)

paddanMedlem sedan dec. 2002323 inlägg
#11

Men vad ska jag göra då?
Har du några ideer?

Peter SMedlem sedan dec. 20025 484 inlägg
#12

Om inte ovanstående är all ASP-kod är nog det bästa att bifoga just all kod.

:)

paddanMedlem sedan dec. 2002323 inlägg
#13

Kod som skriver ut allt:

<%
	Innlegg = Replace(Server.HTMLEncode(rs("info")),vbCrLf,"<br />")
	With New RegExp
	    .Global=True
	    .IgnoreCase=True

	    .Pattern="\[u\]([\w\W]*?)\[/u\]"
	    Innlegg=.Replace(Innlegg,"<h5>$1</h5>")

	    .Pattern="\[b\]([\w\W]*?)\[/b\]"
	    Innlegg=.Replace(Innlegg,"<strong>$1</strong>")
	
	    .Pattern="\[i\]([\w\W]*?)\[/i\]"
	    Innlegg=.Replace(Innlegg,"<em>$1</em>")

	    .Pattern="\[p\]([\w\W]*?)\[/p\]"
	    Innlegg=.Replace(Innlegg,"<div class=""box"">$1</div>")

	    .Pattern="\[r\]([\w\W]*?)\[/r\]"
	    Innlegg=.Replace(Innlegg,"<em class=""red"">$1</em>")

	    .Pattern="\[g\]([\w\W]*?)\[/g\]"
	    Innlegg=.Replace(Innlegg,"<em class=""green"">$1</em>")

	    .Pattern="\[bl\]([\w\W]*?)\[/bl\]"
	    Innlegg=.Replace(Innlegg,"<em class=""blue"">$1</em>")

	    .Pattern="\[c\]([\w\W]*?)\[/c\]"
	    Innlegg=.Replace(Innlegg,"<p class=""center"">$1</p>")

	    .Pattern="\[www\]([\w\W]*?)\[/www\]"
	    Innlegg=.Replace(Innlegg,"<a href=""http://$1"" title=""$1"">$1</a>")

	    .Pattern="\[list\]([\w\W]*?)\[/list\]"
	    Innlegg=.Replace(Innlegg,"<ul class=""text_list""><li>$1</li></ul>")
	
	    .Pattern = "\[img](.*?)\[/img]"
	    Innlegg=.Replace(Innlegg,getref("f"))
	End With
	
	Response.write(Innlegg)
	
	function f(r,o,m,a)
	    f = "<img src=""upload/textbilder/"& o &""" height="""& getImgHeight("/upload/textbilder/"& o &"") &""" alt="""& o &""" class=""text_bild"" />"
	end function
	%>

Och här har du funktionerna som tar widthen och heighten

Function getImgWidth(img)
Dim myImg, fs
SET fs= CreateObject("Scripting.FileSystemObject")
IF fs.fileExists(Server.MapPath(img)) THEN
SET myImg = loadpicture(Server.MapPath(img))
getImgWidth = round(myImg.width / 26.4583)
SET myImg = nothing
ELSE
getImgWidth="Fel!"
END IF
SET fs=Nothing
END Function

Function getImgHeight(img)
Dim myImg, fs
SET fs= CreateObject("Scripting.FileSystemObject")
IF fs.fileExists(Server.MapPath(img)) THEN
SET myImg = loadpicture(Server.MapPath(img))
getImgHeight = round(myImg.height / 26.4583)
SET myImg = nothing
ELSE
getImgWidth="Fel!"
END IF
SET fs=Nothing
END Function

Orsaken till detta är att få sidan godkänd i validatorn som kräver widht och height på alla bilder.

Mvh martin

Peter SMedlem sedan dec. 20025 484 inlägg
#14

Ha du testat getImgHeight/-Width separat så att de fungerar? Om inte kan du ju definiera dem som

function getImgHeight(s)
  getImgHeight = 365
end function

...och se så att RegExp:arna fungerar.

Denna rad

Innlegg = Replace(Server.HTMLEncode(rs("info")),vbCrLf,"<br />")

...tyder på att det finns mer kod att visa. Ligger With-blocket innanför något annat kontrollblock? Som jag skrev innan tror jag ej att funktioner kan definieras i sådana block, vilket är fallet om du använder ovanstående kod.

paddanMedlem sedan dec. 2002323 inlägg
#15

Hej
Om jag tar min ursprungliga kod:
Innlegg=.Replace(Innlegg,"<img src=""upload/textbilder/$1"" height="""& getImgHeight("/upload/textbilder/$1")&""" alt=""$1"" class=""text_bild"" />")
och byter ut $1 i height="""& getImgHeight("/upload/textbilder/$1")&""" till namnet på bilden så fungerar både getImgheight och getImgwidth så funktionerna fungerar.
Men den verkar inte skicka rätt in i funktionen om jag använder $1.

Mvh martin

Peter SMedlem sedan dec. 20025 484 inlägg
#16

Ja, det är därför mitt förslag fungerar. Problemet, som sagt, tror jag ligger i att du lagt f() i ett kontrollblock istället för globalt.

paddanMedlem sedan dec. 2002323 inlägg
#17

Du hade fullständigt rätt...jag la funtionen uppe ovanför html taggen... och sedan ändrade jag en liten sak bara..! med pattern taggen!

 .Pattern="\[bild\]([\w\W]*?)\[/bild\]"
	    Innlegg=.Replace(Innlegg,getref("f"))
Function getImgWidth(img)
Dim myImg, fs
SET fs= CreateObject("Scripting.FileSystemObject")
IF fs.fileExists(Server.MapPath(img)) THEN
SET myImg = loadpicture(Server.MapPath(img))
getImgWidth = round(myImg.width / 26.4583)
SET myImg = nothing
ELSE
getImgWidth="Fel!"
END IF
SET fs=Nothing
END Function

Function getImgHeight(img)
Dim myImg, fs
SET fs= CreateObject("Scripting.FileSystemObject")
IF fs.fileExists(Server.MapPath(img)) THEN
SET myImg = loadpicture(Server.MapPath(img))
getImgHeight = round(myImg.height / 26.4583)
SET myImg = nothing
ELSE
getImgHeight=img
END IF
SET fs=Nothing
END Function

function f(r,o,m,a)
	    f = "<img src=""/maxi/upload/textbilder/"& o &""" width="""& getImgWidth("/maxi/upload/textbilder/"& o &"") &""" height="""& getImgHeight("/maxi/upload/textbilder/"& o &"") &"""   alt="""& o &""" class=""text_bild"" />"
end functio

n

Tack för all hjälp...jäkligt snällt!

Peter SMedlem sedan dec. 20025 484 inlägg
#18

Weee! :bire

Anledningen till att jag använder getref() är att det annars verkar vara svårt att läsa av captures ($1...$n). Ibland vill man ju faktiskt kunna skicka in dem i en funktion (getImgHeight/-Width i ditt fall).

'f' var bara ett exempel från min sida. Du kan ju döpa om funktionen till något mer passande namn. :)

Glöm inte att använda acceptera som slutgiltigt svar.

Genererad på 385 ms · cache AV · v20260730165559-full.f96bc7eb