Avatar billede Slettet bruger
05. maj 2010 - 12:41 Der er 21 kommentarer og
2 løsninger

Jeg har et forfærdeligt problem

Hej Jeg har nedenstående script:

function gem(){
g_besked=document.getElementById('besked').value;
g_farve_1=document.getElementById('farve_1');
g_farve_2=document.getElementById('farve_2');
g_farve_3=document.getElementById('farve_3');
g_farve_4=document.getElementById('farve_4');
g_bold=document.getElementById('bold');
g_italic=document.getElementById('italic');
g_underline=document.getElementById('underline');
if (g_besked!=''){
if (g_farve_1.checked==true){
g_farve=g_farve_1.value;
}
if (g_farve_2.checked==true){
g_farve=g_farve_2.value;
}
if (g_farve_3.checked==true){
g_farve=g_farve_3.value;
}
if (g_farve_4.checked==true){
g_farve=g_farve_4.value;
}
if (g_bold.checked==true){
g_bold=g_bold.value;
}
else{
g_bold='';
}
if (g_italic.checked==true){
g_italic=g_italic.value;
}
else{
g_italic='';
}
if (g_underline.checked==true){
g_underline=g_underline.value;
}
else{
g_underline='';
}
url='gem.asp';
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-Type", "text/plain")
xmlhttp.send('besked<%=session.sessionid%>=' + g_besked + '&farve<%=session.sessionid%>=' + g_farve + '&bold<%=session.sessionid%>=' + g_bold + '&italic<%=session.sessionid%>=' + g_italic + '&underline<%=session.sessionid%>=' + g_underline);
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-Type", "text/plain")
xmlhttp.send('besked<%=session.sessionid%>=' + g_besked + '&farve<%=session.sessionid%>=' + g_farve + '&bold<%=session.sessionid%>=' + g_bold + '&italic<%=session.sessionid%>=' + g_italic + '&underline<%=session.sessionid%>=' + g_underline);
}
}
document.getElementById('besked').value='';
document.getElementById('besked').style.height='14px';
document.getElementById('besked').focus();
}

Det skal poste noget tekst fra et textarea, samt noget fra en radio-button og fra tre forskellige checkbox'. Mit problem er så at hvis jeg sætter den til "text/plain" i content-type - så fejler Javascriptet ikke, men min asp-fil (gem.asp) fanger ikke formularindholdet.
Hvis jeg så sætter content-type til "application/x-www-form-urlencoded" så poster den det godt nok, og gem.asp fanger det også. Men så er det urlencoded og så kan man ikke skrive æ, ø og å og mellemrumene er også væk.

Hvad skal det så være?
Og hvad content-type er en form egentlig pr. default?

Dette er en lidt akut sag, så hvis 200 point ikke er nok forhøjer jeg gerne!

\Dan
Avatar billede Jensen DK Novice
05. maj 2010 - 13:09 #1
Du må max give 200 point pr spørgsmål.
Avatar billede olebole Juniormester
05. maj 2010 - 13:11 #2
<ole>

Den korrekte måde er:
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

- og så skal du encode dine variabler:

xmlhttp.send('besked<%=session.sessionid%>=' + encodeURIComponent(g_besked) + '&farve<%=session.sessionid%>=' + encodeURIComponent(g_farve) + '&bold<%=session.sessionid%>=' + encodeURIComponent(g_bold) + '&italic<%=session.sessionid%>=' + encodeURIComponent(g_italic) + '&underline<%=session.sessionid%>=' + encodeURIComponent(g_underline));


/mvh
</bole>
Avatar billede olebole Juniormester
05. maj 2010 - 13:13 #3
PS: Dine variabler skal være urlencoded. Ellers kan du netop ikke bruge æ, ø og å  =)
Avatar billede olebole Juniormester
05. maj 2010 - 13:20 #4
PPS: Det er vigtigt, at det dokument, du har scriptet i, er gemt som utf-8 - og at det indeholder en utf-8 meta
Avatar billede Slettet bruger
05. maj 2010 - 14:15 #5
Hej ole

Mange tak for hjælpen indtil nu!

Min meta med charset er denne:

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />

og jeg går ud fra den skal være dette:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Det er således at min metatags sættes centralt på siden, i en fil, som includes til de andre... Så jeg skal lige vide hvad har af konsekvenser at ændre alt til utf-8...?

Smid i øvrigt et svar for point...

\Dan
Avatar billede Slettet bruger
05. maj 2010 - 14:21 #6
Det virker godt nok nu, med mellemrum men den kan ikke skrive æøå til databasen når det er utf-8...

\Dan
Avatar billede olebole Juniormester
05. maj 2010 - 14:30 #7
iso-8859-1 har været de facto deprecated i adskillige år og er erstattet af utf-8. Fra og med version 1.5 (efterhånden en temmelig gammel version) har JavaScript ikke haft funktioner til at encode variabler i iso-8859-1. Derfor giver det ikke mening at bruge Ajax sammen med iso-8859-1.

Virkeligheden tilhører Unicode  ;o)
Avatar billede olebole Juniormester
05. maj 2010 - 14:33 #8
- og konsekvenserne er ret omfattende:

*) Alle dokumenter på sitet bør have den nye meta.
*) Alle dokumenter på sitet bør gemmes med utf-8 encoding.
*) Al database indhold bør konverteres - ligesom tabellerne bør ændres til at håndtere utf-8
Avatar billede olebole Juniormester
05. maj 2010 - 14:35 #9
- og skifter du ikke nu, vil din vej blive lang, trang og fyldt med besværlige sten ... lige til den dag, du ikke længere kan holde ud at skulle hack'e dig gennem at vedligeholde din kode og derfor vælger at skifte.

Spørgsmålet er ikke 'om du skal skifte', men om du vil vente til du eksploderer i frustration  =)
Avatar billede Slettet bruger
05. maj 2010 - 14:43 #10
ok... Det forstår jeg...

Men problemet er bare at gem.asp gemmer det i utf-8 også... Altså så bliver æøå til nogle ret mærkelige tegn i databasen - og det er ikke hensigtsmæssigt...
Kan dette ikke undgåes?

\Dan
Avatar billede olebole Juniormester
05. maj 2010 - 14:52 #11
Ja, hvis du gør, som jeg beskriver i #8, kan det ikke gå galt med dine skandinaviske specialtegn  =)
Avatar billede Slettet bruger
05. maj 2010 - 14:54 #12
problemet er så også at nu er det pludseligt muligt for brugeren at sætte html-tags ind i beskeden...

Og når det så skal vises igen på en anden side, så kan jeg ikke i asp, skrive server.htmlencode() for at undgå at disse tags har nogen effekt på dokumemtet...

Hvordan løser man så den med utf-8?

\Dan
Avatar billede Slettet bruger
05. maj 2010 - 14:57 #13
Jeg har gjort som du beskriver i #8, men det gemmes stadig med mærkelige tegn i databasen... Så hvis man bare åbner databasen for at læse i den er de tegn der... Jeg har også indsat response.Charset="utf-8" i gem.asp

\Dan
Avatar billede olebole Juniormester
05. maj 2010 - 15:10 #14
Ikke, hvis du har sat databasen til at køre utf-8 - og (meget vigtigt) alle filer er gemt som utf-8. Det kan du evt. tjekke forneden i Notepad's Gem Som... dialog.

Husker du også, at det dokument, som viser dine data, skal være et utf-8 dokument ... gemt som sådan og med korrekt meta?
Avatar billede olebole Juniormester
05. maj 2010 - 15:13 #15
"problemet er så også at nu er det pludseligt muligt for brugeren at sætte html-tags ind i beskeden..." >> Jeg håber sandelig ikke din sikkerhed mod den slags udelukkende består i brugen af et forældet tegnsæt!  =8-O

Du kunne på serveren udskifte alle < med &lt; - men at forhindre HTML-tags dækker jo kun en yderst beskeden del af de ting en ubehagelig person kan finde på
Avatar billede Slettet bruger
05. maj 2010 - 15:17 #16
hehe ok... I hvert fald mange mange tak for hjælpen ole!!!

Vil du ikke smide et svar for point? En skam man kun kan betale 200 point for så meget hjælp, men der er jo nogen der siger man ikke må betale mere...

Du har i hvert fald givet mig noget at tænke over - og ikke mindst arbejde med... Der kommer jo til at gå flere måneder inden jeg er færdig... hehe...

\Dan
Avatar billede olebole Juniormester
05. maj 2010 - 15:37 #17
Kan du ikke prøve at lave en lille dummy med en DB-tabel og et par dokumenter, der henholdsvis indsætter og viser data? Så kan vi få evt. tvivlsspørgsmål uddybet med det samme - nu vi er igang. Så kan du senere implementere det i den fulde version.

Points modtager jeg primært af hensyn til ikke at udhule systemet for nye brugere, der gerne vil samle, så det må du endelig ikke tænke på. Til gengæld hader jeg, når en spørger klapper en tråd i uden et lille tak, bøh eller rend mig i r**** - men det er en helt anden ting, der slet ikke er aktuelt her  ;o)
Avatar billede Slettet bruger
05. maj 2010 - 15:48 #18
Skal dette tolkes som om du ikke vil have point?

Nu er det en access2003-database jeg har med at gøre her... Ved du hvor man sætter charset til utf-8 deri?

Det var vist også det sidste spørgsmål jeg har... hehe... Så kommer det store arbejde så bare...

\Dan
Avatar billede olebole Juniormester
05. maj 2010 - 22:05 #19
Det skal tolkes sådan, at du endelig ikke må ærge dig over, du ikke kan give mere end 200 points. Et spm. bør udløse 15-60 points alt efter sværhedsgrad - 200 er for den helt exceptionelle indsats. 60 er mere end rigeligt her  ;o)

Jeg er desværre langtfra at være Access haj  :o|

Prøv lige at validere dit dokument via dette link:
    http://validator.w3.org/#validate_by_uri+with_options

- og husk at checke Verbose Output. Så vil du foroven (udfor Encoding:) kunne se hvilket tegnsæt, din server sender dokumetet med. Det kan være, serveren overskriver dine forsøg på at lade den outputte utf-8(?)
Avatar billede olebole Juniormester
05. maj 2010 - 22:06 #20
- og svaret  =)

Men lad os endelig fortsætte og se, om vi kan nå i mål
Avatar billede Slettet bruger
06. maj 2010 - 01:43 #21
Hej ole

Så bliver det 60 point...

- jeg har lavet validering og er bestået - uden anmærkninger.
Og på asp-siden er response.charset="utf-8" indsat på alle sider - og så er det vel det serveren sender det i... Ellers ophører al sund fornuft da...

Endnu engang tak for hjælpen!

Nu må jeg i arbejdslejr....

\Dan
Avatar billede olebole Juniormester
06. maj 2010 - 09:25 #22
Hehe ... tak for points  ;o)

Min tanke med valideringen var nu ikke så meget at bestå - kodemæssigt. Det var mere for at se tegnsættet, dokumentet bliver sendt med - bare for at være helt sikker på, hvad serveren faktisk sender  =)
Avatar billede Slettet bruger
06. maj 2010 - 11:42 #23
- og det er utf-8 den registrerer i valideringen hvis man indsætter response.charset="utf-8" i toppen af koden...

\Dan
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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