webForumDet fria alternativet

Valet i kvalet - validerat eller html-formaterat?

ASP

20 svar · 1 036 visningar · startad av DanneSt

Medlem sedan feb. 20041 311 inlägg
Frågan#1

Försöker lära mig funktionaliteten med Server.HTMLEncode.
Använder det på några webbplatser för att få input-text att validera.
Problemet jag stött på nu är att då går det ju inte att använda HTML-kod som t.ex. att lägga in en länk eller mailto...

Vad har jag missat?
Det finns väl nåt smart att göra så dessa två behov kombineras?

Medlem sedan apr. 20031 660 inlägg
#2

HEJ!

Hmm, lite information om vad du försöker lösa för problem vore bra. Det verkar som att du använder det för att hämta data från formulär?

Jag kan upplysa om att jag nästan aldrig använder det, förutom i vissa länkar för att få med tecken.

Medlem sedan feb. 20041 311 inlägg
#3

Jag har gjort en webbplats åt en kund som ska få uppdatera vissa delar genom ett litet formulär. Datat stoppas in i en databas som sen hämtas av asp-sidan.

För att få webbplatsen att validera om någon skriver in ett "&"-tecken så fick jag ett råd här på wF att använda mig av Server.HTMLEncode. Det funkar ju bra ända tills jag nu kommer på att jag vill kunna låta kunden (eller mig själv) ange html-kod som t.ex. <a href="mailto:daniel@alno.nu">daniel@alno.nu</a>.

Så nu sitter jag och är väldigt sugen på att strunta i de ev. valideringsmissar som kan uppstå...men det känns ju fel!

Medlem sedan apr. 20031 660 inlägg
#4

Okej.

Du refererar till https://www.webforum.nu/showthread.php?t=146690, där jag hade gjort som CatZ tipsar om, och inte som @nders, dvs en replace när jag presenterar texten, alternativt när man sparar det i databasen. @nders har dock replace endast på & också.

Server.HTMLEncode hade jag plockat bort för att kunna skriva och använda html-kod. Har inte testat detta själv, vet inte vilket som blir bäst i alla lägen.

Om man både vill låta användarna använda html, och inte, får man styra det med behörigheter, och spara texten på olika sätt, antar jag.

Medlem sedan feb. 20041 311 inlägg
#5

Mmm...tittade faktiskt på den tråden igen igår men orkade inte sätta mig in i CatZ förslag riktigt. Har aldrig använt "egna" funktioner tidigare.

Lägger man in en funktion i headern bara, eller? :l

Medlem sedan apr. 20031 660 inlägg
#6

Ja, eller i din general.asp/settings.asp/include.asp osv.

Eftersom detta är något som du ska använda på flera sidor, lägges den lämpligen i en fil som du redan inkluderar på alla/de flesta av dina sidor.

Medlem sedan feb. 20041 311 inlägg
#7

Ok, och lite kort "function-utbildning" dårå... :-)

 Function fReplace(ByVal strText)
  strText = Replace("&", "&amp;")
  strText = Replace(vbCrLf, "<br />")
  
  fReplace = strText
End Function

Är beståndsdelarna enligt följande:

"Function" är triggern på att det är en funktion.
Sen följer funktionens namn.
Inom parantes är ett antal variablar som ska stå enligt någon typ av standard/formatering.
Därefter lägger man upp de olika ersättningarna (i det här fallet två st, kan utökas i det oändliga).

Därefter använder jag "fReplace" istället för "Replace" på lämpliga ställen i ASP-koden?

Har jag fattat galoppen? :q

Medlem sedan juni 20019 519 inlägg
#8
[blue]'fReplace är namnet på våran funktion. den har 1 st In-parameter som ska in och den har namnet strText[/blue]
Function fReplace(ByVal strText)
  [blue]'Dock är denna replace funktion fel skapad men:
  ' StrText = replace(strText,"&","&amp;)
  ' Detta gör att vi tar våran in-parameter "strText" och söker igenom och se om vi har något & i våran text.[/blue]
  strText = Replace("&", "&amp;")
  strText = Replace(vbCrLf, "<br />")
  [blue]'Eftersom en funktion ska retunera något och ASP har inte "return" så använder vi vad funktionen ska retunera. dvs freplace funktionen retunera våran om formaterad strText[/blue]
  fReplace = strText
End Function

Detta är inte det bästa förklaring dock :)

Medlem sedan feb. 20041 311 inlägg
#9

Tack för ditt inlägg! Jag har några följdfrågor:

voigtann1 skrev:

'fReplace är namnet på våran funktion. den har 1 st In-parameter som ska in och den har namnet strText
Function fReplace(ByVal strText)

Kan en funktion ha fler än 1 in-parameter?
Vad har ByVal för egenskap? Är den förbestämd eftersom den inte definieras någonstans?

voigtann1 skrev:

'Dock är denna replace funktion fel skapad men:

Vad är det som är felaktigt (så jag slipper göra samma misstag)?

voigtann1 skrev:

' StrText = replace(strText,"&","&)
' Detta gör att vi tar våran in-parameter "strText" och söker igenom och se om vi har något & i våran text.
strText = Replace("&", "&")
strText = Replace(vbCrLf, "<br />")
'Eftersom en funktion ska retunera något och ASP har inte "return" så använder vi vad funktionen ska retunera. dvs freplace funktionen retunera våran om formaterad strText
fReplace = strText
End Function
Detta är inte det bästa förklaring dock :)

Så svaret på min fråga "Därefter använder jag "fReplace" istället för "Replace" på lämpliga ställen i ASP-koden?" är alltså Ja? :-)

Medlem sedan juni 200032 967 inlägg
#10

Kan en funktion ha fler än 1 in-parameter?

Ja, hur många som helst (nåja.).

Vad har ByVal för egenskap?

http://www.asp101.com/tips/index.asp?id=68

...är alltså Ja?

Ja.

Medlem sedan juni 20019 519 inlägg
#11

strText = Replace("&", "&")
strText = Replace(vbCrLf, "<br />")

replace fungera:

replace(vilken sträng värde är det jag ska söka efter,vad är det jag söker efter,vad ska jag ersätta den med)

http://www.w3schools.com/vbscript/func_replace.asp

Medlem sedan feb. 20041 311 inlägg
#12

Man tackar!

Vet inte vem som jag ska sätta som slutgiltig då Ni alla har varit väldigt hjälpsam, men det bidde J.N. som var snabb! :-)
Tack alla!

Medlem sedan feb. 20041 311 inlägg
#13

Neeeehhh...nu är jag iofs trött och stressad, men jag tar chansen att ställa en fråga och få ett uppenbart svar... :-)

Har nu i <head> fört in kodsnutten:

<script language="JavaScript" type="text/javascript">
<!-- Begin // 
	Function fReplace(ByVal strText)
	strText = Replace("&", "&amp;")
	strText = Replace(vbCrLf, "<br />")
  
	fReplace = strText
	End Function 
//  End -->
</script>

samt lite längre ner i <body>:

<%=fReplace(rs("kontakt"))%>

och får sedan felmeddelandet:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'fReplace'

Uh?

Medlem sedan dec. 20003 887 inlägg
#14

En liten kommentar om @ndars's länk. Jag läste endast första sidan

(Note: This is often considered bad practice because it makes code difficult to follow and even harder to understand.)

ByVal: en kopia av variabeln/objektet
ByRef: en "pekare" till variabeln/objektet (jag vet faktiskt till inte fullo hur VBScript hanterar referenser)

Att det på något vis skulle vara "bad practice" att använda ByRef är fullständigt skitsnack!

ByRef är för övrigt default i VBScript, så det kan orsaka mycken huvudbry hos programmerare som inte har pysslat med programmering förut.

Jag tar för givet att @nders kommer att förklara sin länk och att han även kommer att ge en bättre beskrivning av dessa två små ord (ByVal, ByRef) än vad han gjorde tidigare.

En bra förklaring belönas givetvis med nybakta lussebullar :)

Medlem sedan dec. 20003 887 inlägg
#15

DanneSt kan det vara så att ditt recordset är tomt? Dvs du skickar null till din funktion? (VBScript hanterar inte null speciellt bra)

Medlem sedan juni 20019 519 inlägg
#16

Din replace är fortfarande fel...

Medlem sedan juni 200032 967 inlägg
#17

Engine skrev:

Jag tar för givet att @nders kommer att förklara sin länk

Det hade jag inte tänkt göra...

Engine skrev:

och att han även kommer att ge en bättre beskrivning av dessa två små ord (ByVal, ByRef) än vad han gjorde tidigare.

När då? Länkar förklarar bra, så slipper man skriva samma (eller andra) förklaringar gång på gång.

Medlem sedan feb. 20041 311 inlägg
#18

voigtann1 skrev:

Din replace är fortfarande fel...

Misstänkte det, har du förslag så den blir rätt?

Medlem sedan juni 20019 519 inlägg
#19

läs länkarna jag har bifogat:

	strText = Replace([b]strText ,[/b]"&", "&amp;")
	strText = Replace([b]strText ,[/b]vbCrLf, "<br />")

Plus du kan ju inte ha det som ett javascript:

<%
Function fReplace(ByVal strText)
  strText = Replace([b]strText ,[/b]"&", "&amp;")
  strText = Replace([b]strText ,[/b]vbCrLf, "<br />")
  fReplace = strText
End Function 
%>
Medlem sedan feb. 20041 311 inlägg
#20

Aha1, då förstår jag vad jag har missat!

Aha2, jag trodde det var nån typ av scriptfunktion. Tackar!

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