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.
20 svar · 1 036 visningar · startad av DanneSt
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?
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.
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!
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.
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
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.
Ok, och lite kort "function-utbildning" dårå... :-)
Function fReplace(ByVal strText)
strText = Replace("&", "&")
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
[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,"&","&)
' 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("&", "&")
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 :)
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? :-)
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.
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)
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!
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("&", "&")
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?
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 :)
DanneSt kan det vara så att ditt recordset är tomt? Dvs du skickar null till din funktion? (VBScript hanterar inte null speciellt bra)
Din replace är fortfarande fel...
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.
voigtann1 skrev:
Din replace är fortfarande fel...
Misstänkte det, har du förslag så den blir rätt?
läs länkarna jag har bifogat:
strText = Replace([b]strText ,[/b]"&", "&")
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]"&", "&")
strText = Replace([b]strText ,[/b]vbCrLf, "<br />")
fReplace = strText
End Function
%>
Aha1, då förstår jag vad jag har missat!
Aha2, jag trodde det var nån typ av scriptfunktion. Tackar!