Avatar billede steen_hansen Forsker
05. januar 2003 - 21:01 Der er 28 kommentarer og
1 løsning

Ucase?

Jeg udskriver flg. fra en Access-database:

Response.Write "<tr><td><br><b>" & Ucase(FormatText(RS("headline"))) & "</b></td></tr>"

Ucase konverterer alle karakterer fint til store bogstaver, men ikke æ, ø og å. Hvorfor ikke?
Avatar billede terry Ekspert
05. januar 2003 - 21:04 #1
more than likley because UCase only works with US characters a-z
Avatar billede terry Ekspert
05. januar 2003 - 21:05 #2
it works INSIDE Access though!
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:07 #3
Hej Terry!

Hvordan kringler jeg den så?
Avatar billede terry Ekspert
05. januar 2003 - 21:08 #4
what does FormatText do, can this have something to do with the problem?
Avatar billede terry Ekspert
05. januar 2003 - 21:10 #5
well you may be able to get Access to do the conversion

SELECT Ucase([headline]) as HL ......
Avatar billede terry Ekspert
05. januar 2003 - 21:12 #6
what do you get if you just use ?
Response.Write "<tr><td><br><b>" & RS("headline") & "</b></td></tr>"

can you see æøå OK?
Avatar billede terry Ekspert
05. januar 2003 - 21:13 #7
I dont see why Ucase doesnt work in VBScript with æøå!
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:14 #8
Function FormatText laver evt. indtastet kode om til tekst, så folk ikke kan poste kode. Det laver også links og e-mailadresser aktive (Regular Expressions)

Hvordan - helt nøjagtigt skal den stump kode se ud?
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:17 #9
Jo, hvis jeg fjerner FormatText, udskrives det korrekt. Men det er ikke smart, hvis folk kan indtaste kode :o/
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:18 #10
Ucase(RS("headline")) udskrives korrekt
Avatar billede terry Ekspert
05. januar 2003 - 21:19 #11
steen I cant see how you are selecting the data from the database but you should be able to jsut alter the SQL to something like I mentioned.

SELECT *, Ucase([headline])AS headline FROM YourTable .....
Avatar billede terry Ekspert
05. januar 2003 - 21:20 #12
FormatText(ucase(headline))
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:20 #13
Er det denne linie, der laver det?

objRegExp.IgnoreCase = True
Avatar billede terry Ekspert
05. januar 2003 - 21:21 #14
so what we are saying is its FormatText which is the problem!!!
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:21 #15
Ok, jeg prøver lige dit forslag ...
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:22 #16
Ja, det er det, der er problemet. Det er jo ret vigtigt, at folk ikke kan sende kode til databasen, som eksekveres.
Avatar billede terry Ekspert
05. januar 2003 - 21:23 #17
I dont know much about ASP, but you say that UCASE(headline) works so it cant be objRegExp.IgnoreCase = True, or I wouldnt have thought so anyway.
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:28 #18
Jeg har lige prøvet at "remme" (remark) den linie ud, og det gjorde ingen forskel. Vil du se hele koden?
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:30 #19
Function FormatText(str)
   
'    Lav Regular Expression object
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True
   
'    Konverter HTML-tags
    str = Server.HTMLEncode(str)
   
'    Udskift efter hinanden følgende mellemrum med "&nbsp;":
    objRegExp.Pattern = "(\s) "
    str = objRegExp.Replace(str,"$1&nbsp;")
   
'    Lav enkelt linieskift
    str = Replace(str, vbcrlf, VbCrLf & "<br>" & vbCrLf)
   
'    Lav links (http og mailto)
    str = LinkString(str)
   
    FormatText = str
end function

Function LinkString(strInput)
    Set objRegExpHTTP1 = New RegExp
    Set objRegExpHTTP2 = New RegExp
    Set objRegExpEMail = New RegExp

    objRegExpHTTP1.Pattern = "(http|ftp)(:\/\/[\w\._-]+\.[\w\._-]+\S*)"
    objRegExpHTTP2.Pattern = "(^|[^\/])(www[^\.\s]?\.[\w\._-]+\.[A-Za-z]{2,3}[\w\S]*)"
    objRegExpEMail.Pattern = "([\w\._-]+@[\w\._-]+\.[A-Za-z]{2,3}\S*)"

    objRegExpHTTP1.Global = True
    objRegExpHTTP2.Global = True
    objRegExpEMail.Global = True

    objRegExpHTTP1.IgnoreCase = True
    objRegExpHTTP2.IgnoreCase = True
    objRegExpEMail.IgnoreCase = True

    strOutput = objRegExpEMail.Replace(strInput, " <a href='mailto:$1'>$1</a> ")
    strOutput = objRegExpHTTP1.Replace(strOutput, " <a href='$1$2' target='_blank'>$1$2</a> ")
    strOutput = objRegExpHTTP2.Replace(strOutput, " $1<a href='http://$2' target='_blank'>$2</a> ")

    objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])('>)"
    strOutput = objRegExpHTTP2.Replace(strOutput, "$2")
    objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])(' target=)"
    strOutput = objRegExpHTTP2.Replace(strOutput, "$2")
    objRegExpHTTP2.Pattern = "(<br>|[,.)\]\}])(</a>)"
    strOutput = objRegExpHTTP2.Replace(strOutput, "$2$1")

    Set objRegExpHTTP2 = Nothing
    set objRegExpHTTP1 = Nothing
    Set objRegExpEMail = Nothing

    LinkString = strOutput
End Function
Avatar billede terry Ekspert
05. januar 2003 - 21:30 #20
steen, as I said, I dont know much about ASP but
Response.Write "<tr><td><br><b>" & Ucase(FormatText(RS("headline"))) & "</b></td></tr>"

is writing the data which is READ from the database to the screen! How can removing FormatText be a security problem?
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:36 #21
Man kan slette filer m.m. med kode, hvis ikke du fratager brugeren den mulighed. Derfor skal al tekst, som der er skrevet som kode, gemmes som tekst og udskrives som tekst. Den kode må ikke kunne eksekveres.
Avatar billede terry Ekspert
05. januar 2003 - 21:36 #22
It is obvious that it is FormatText which is giving the problem. If you can alter your SQL SELECT to use Ucase so that it is converted BEFORE you use formattext then it should solve the problem!
Avatar billede terry Ekspert
05. januar 2003 - 21:38 #23
steen, have you tried using

formattext(ucase(headline))

or

LECT *, Ucase([headline])AS headline FROM YourTable .....
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:39 #24
Ok, den må jeg så lige kigge på. Har du et færdigt svar på hvordan det kan gøres? Min eksisterende SQL-sætning ser således ud:

strSQL = "SELECT TOP 1 * FROM info ORDER BY infoID DESC"

Den tager den sidst indtastede og skriver den ud.
Avatar billede terry Ekspert
05. januar 2003 - 21:39 #25
LECT  0 SELECT

formattext(ucase(headline))
will execute Ucase BEFORE formattext!
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:40 #26
HOLD DA HELT K..., hvor var det simpelt! :o)

formattext(ucase(headline)) virker fint! Tak for det, Terry :o)
Avatar billede terry Ekspert
05. januar 2003 - 21:43 #27
strSQL = "SELECT TOP 1 *, Ucase([headline]) AS hl FROM info ORDER BY infoID DESC"

If you use * in the select you have already selected headline, so you have to give it another name when you select it with ucase, that is what AS hl does.

So you will then need to alter your code to take this into account
Response.Write "<tr><td><br><b>" & RS("hl") & "</b></td></tr>"

BUT, I think you should try

formattext(ucase(headline))

first, it saves you having to alter more code!
Avatar billede steen_hansen Forsker
05. januar 2003 - 21:43 #28
Det er ikke sådan, når man ikke tænker sig om! Tak for hjælpen, Terry - og godt nytår :o)
Avatar billede terry Ekspert
05. januar 2003 - 21:45 #29
Yes quite often its the simple solutions that work :o)

and thanks, we got there in the end :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester