Hej.... Jeg har lavet en kalender med noget asp og XML. I den forbindelse kan det åbenbart være svært at få brugt specialtegn....
Jeg har et admin-interface til kalenderen, hvorfra der kan plottes ativiteter ind i kalenderen. Til redigering af aktiviteter, tidspunkter, dato osv. bruges GET. Men bruger jeg specialtegn går det galt, og jeg får en ubrugelig ' object required'-fejl.
Er der noget der hedder omvendt url-encoding jeg kan bruge på de felter hvor det går galt?
Jepz...Men det er ike mig der skal bruge skidtet....hvis det bare var så nemt. Nej brugere har det jo med at bruge programmer på uventede måder. Så enten skal jeg checke alle mulige felter og filtrere snavs væk, eller osse lader jeg folk skrive lige hvad de vil.
Jeg vil gerne det sidste da det klart er nemmest, og ikke giver knapt så maget ballade, som sidstnævnte.
Mit problem er bare at det er muligt at få tastet ulovlige værdier ind i min kalender.....men de kan ikke redigeres efterfølgende, ej heller slettes, da de specielle tegn hentet fra GET laver ballade i min ASP.
Derfor vil jeg gerne trylle de urlencodede tegn tilbage til ganske gemene ascii-fætre.
Hvis du vil gemme helt almindelig tekst i et XML-ark, og det ikke skal fortolkes på nogen som helst måde, så skal det lægges i en CDATA sektion. Ellers vil den brogge sig over "underlige" tegn.
Endvidere har du i toppen af dit XML-ark angivet en encoding, f.eks. UTF-8 eller noget i den stil. De specielle danske tegn skal i det tilfælde også encodes efter denne.
Nu er jeg ikke den store asp eller xml-haj. Jeg er ikke lige med på hvordan jeg skal skrue det sammen med CDATA. Men måske du kan bruge nogle stumper af koden til kalenderen som eksempel.
Dim strUgenr strUgenr = Request.QueryString("ugeNr") Dim strUgeDag strUgeDag = Request.QueryString("ugeDag")
'strItem afgr om der skal redigeres en dato eller et arrangement Dim strItem strItem = Request.QueryString("item")
Dim strDato Dim strTid Dim strBeskr Dim strType Dim strLink Dim strLokale
'XML-filerne Dim strXML strXML = server.MapPath("kalender.xml")
'lokale variabler. Dim objRoot Dim objWeek
Select Case strItem Case "dato"
strDato = Request.Form("dato")
'lav en instans af et XMLDOM Objekt. set objXML = Server.CreateObject("Microsoft.XMLDOM")
'Luk for asyncronous file loading. objXML.async = false
'Hent XMLfilen. objXML.load strXML
'St objRoot variablen til root-elementet af XMLfilen ved 'at kalde documentElement metoden af (XMLDOM)-objektet. Set objRoot = objXML.documentElement
'Lav en reference til den (record) i XMLfilen vi gerne vil redigere 'ved at kalde SelectSingleNode metoden og give den 'nummeret paa den paagaeldende uge. Set objWeek = objRoot.SelectSingleNode("aar/uge[ugenr='" & strUgenr & "']") Set objDag = objWeek.SelectSingleNode("ugedag[navn='" & strUgeDag & "']/dato")
'opdatering 'af vaerdierne i ugens felter. objDag.text = strDato
'Efter redigering gemmer vi XMLfilen objXML.save strXML Response.Redirect "kalender.asp#uge"&strUgenr
'lav en instans af et XMLDOM Objekt. set objXML = Server.CreateObject("Microsoft.XMLDOM")
'Luk for asyncronous file loading. objXML.async = false
'Hent XMLfilen. objXML.load strXML
'St objRoot variablen til root-elementet af XMLfilen ved 'at kalde documentElement metoden af (XMLDOM)-objektet. Set objRoot = objXML.documentElement
'Lav en reference til den (record) i XMLfilen vi gerne vil redigere 'ved at kalde SelectSingleNode metoden og give den 'nummeret paa den paagaeldende uge. Set objWeek = objRoot.SelectSingleNode("aar/uge[ugenr='" & strUgenr & "']") Set objDag = objWeek.SelectSingleNode("ugedag[navn='" & strUgeDag & "']") Set objArr = objDag.SelectSingleNode("arr[tid='" & strTid & "']")
'Iteration gennem formularens punkter fra request-objektet og opdatering 'af vaerdierne i ugens felter.
Set objKontakt = objArr.SelectSingleNode("kontaktperson") Set objTid = objArr.selectSingleNode("tid[.='" & strTid & "']") Set objLok = objArr.selectSingleNode("lokale") Set objType = objArr.selectSingleNode("text/type") Set objLink = objArr.selectSingleNode("text/link") Set objBesk = objArr.selectSingleNode("text/beskr")
'Efter redigering gemmer vi XMLfilen objXML.save strXML Response.Redirect "kalender.asp#uge"&strUgenr
case "del"
strTid = Request.QueryString("tid")
'lav en instans af et XMLDOM Objekt. set objXML = Server.CreateObject("Microsoft.XMLDOM")
'Luk for asyncronous file loading. objXML.async = false
'Hent XMLfilen. objXML.load strXML
'St objRoot variablen til root-elementet af XMLfilen ved 'at kalde documentElement metoden af (XMLDOM)-objektet. Set objRoot = objXML.documentElement
'Lav en reference til den (record) i XMLfilen vi gerne vil slette 'ved at kalde SelectSingleNode metoden og give den 'nummeret paa den paagaeldende uge. Set objWeek = objRoot.SelectSingleNode("aar/uge[ugenr='" & strUgenr & "']") Set objDag = objWeek.SelectSingleNode("ugedag[navn='" & strUgeDag & "']") Set objArr = objDag.SelectSingleNode("arr[tid='" & strTid & "']")
'Kald RemoveChildmetoden paa objRoot med objArr for at slette objDag.RemoveChild(objArr)
'Efter redigering gemmer vi XMLfilen objXML.save strXML Response.Redirect "kalender.asp#uge"&strUgenr
case "titel"
strTitel = Request.Form("titel")
'lav en instans af et XMLDOM Objekt. set objXML = Server.CreateObject("Microsoft.XMLDOM")
'Luk for asyncronous file loading. objXML.async = false
'Hent XMLfilen. objXML.load strXML
'St objRoot variablen til root-elementet af XMLfilen ved 'at kalde documentElement metoden af (XMLDOM)-objektet. Set objRoot = objXML.documentElement
'Lav en reference til den (record) i XMLfilen vi gerne vil redigere 'ved at kalde SelectSingleNode metoden og give den titelen.
Set objTitel = objRoot.SelectSingleNode("titel")
'opdatering 'af vaerdierne i ugens felter. objTitel.text = strTitel
'Efter redigering gemmer vi XMLfilen objXML.save strXML Response.Redirect "kalender.asp"
End Select
'Vi bruger kun 1 XMLfil: test.xml Dim strXMLfil strXMLfil = server.MapPath("kalender.xml")
'update strXMLfil, server.MapPath("edit.xsl")
'------------------------------------------------------------------- 'UPDATE 'Funktionen tager tre argumenter 'strXML - XMLfilen der skal opdateres 'strXSL - XSLfilen der skal formattere xmlfilen '------------------------------------------------------------------- Function update(strXML, strXSL)
'lokale variabler. Dim objRoot
'lav en instans af et XMLDOM Objekt. set objXML = Server.CreateObject("Microsoft.XMLDOM")
'Luk for asyncronous file loading. objXML.async = false
'Hent XMLfilen. objXML.load strXMLFil
'St objRoot variablen til root-elementet af XMLfilen ved 'at kalde documentElement metoden af (XMLDOM)-objektet. Set objRoot = objXML.documentElement
'Lav en reference til den (record) i XMLfilen vi gerne vil redigere 'ved at kalde SelectSingleNode metoden og give den 'nummeret paa den paagaeldende uge. Set objWeek = objRoot.SelectSingleNode("uge[ugenr='" & strUgenr & "']") Set objDag = objWeek.SelectSingleNode("ugedag[navn='" & strDag & "']") Set objArr = objDag.SelectSingleNode("arr[tid='" & strTid & "']")
'Iteration gennem formularens punkter fra request-objektet og opdatering 'af vaerdierne i ugens felter. Set objDato = objDag.selectSingleNode("[dato='" & strDato & "']/dato") Set objTid = objArr.selectSingleNode("[tid='" & strTid & "']/tid") Set objLok = objArr.selectSingleNode("[lokale='" & strLokale & "']/lokale") Set objType = objArr.selectSingleNode("text[type='" & strType & "']/type") Set objLink = objArr.selectSingleNode("text[link='" & strLink & "']/link") Set objBesk = objArr.selectSingleNode("text[beskr='" & strBeskr & "']/beskr")
'Efter redigering gemmer vi XMLfilen objXML.save strXMLFile
'Nu vil vi gerne have vist Ugen med de redigerede oplysninger. 'XMLfilens ugenr skal vises vha. et bestemt stylesheet viewUge strXMLFile, strXSLFile, strUgenr End Function '------------------------------------------------------------------- ' '//end UPDATE '-------------------------------------------------------------------
'------------------------------------------------------------------- 'viewUge 'Funktionen tager tre argumenter 'strXML - XMLfilen der skal opdateres 'strXSL - XSLfilen der skal formattere xmlfilen 'strUge - Ugenummeret for det pgldende arrangement '------------------------------------------------------------------- Function viewUge(strXMLFile, strXSLFile, strUge) 'lokale variabler Dim objXML Dim objNode Dim objXSL
'lav en instans af et XMLDOM Objekt til XMLfilen. set objXML = Server.CreateObject("Microsoft.XMLDOM")
'Luk for asyncronous file loading. objXML.async = false
'Hent XMLfilen. objXML.load strXMLFil
'Lav en reference til den (record) i XMLfilen vi gerne vil redigere 'ved at kalde SelectSingleNode metoden og give den 'nummeret paa den paagaeldende uge. Set objWeek = objRoot.SelectSingleNode("uge[ugenr='" & strUgenr & "']")
'Lav en instans af et XMLDOM Objekt til XSLfilen. set objXSL = Server.CreateObject("Microsoft.XMLDOM")
'Luk for asyncronous file loading. objXSL.async = false
'Hent XSLfilen. objXSL.load(strXSLFile)
'Brug "transformNode" metoden af XMLDOM til at f XMLdokumentet 'til at bruge XSLfilen... Output skrives til klienten Response.Write(objXML.transformNode(objXSL)) End Function '------------------------------------------------------------------- '//end viewUge '-------------------------------------------------------------------
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.