Avatar billede dennism Nybegynder
26. juni 2005 - 12:06 Der er 25 kommentarer og
1 løsning

JavaScript: Konventer ikke %F8

Jeg har f.eks følgende metode:

test('galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg');

Funktionen kunne så f.eks. se således ud:

function test(picture){
  alert(picture);
}

Mit problem er, at når funktionen skriver variablen picture, så er f.eks %F8 blivet ændret tilbage til ø, %20 til mellemrum osv.

Hvordan kan jeg forhindre dette? Jeg er interesseret i, at det der står i attribut i min metode, skal udskrives på præcis samme måde?
Avatar billede jonashn Nybegynder
26. juni 2005 - 18:07 #1
når jeg kører
<script type="text/javascript">
function test(picture){
  alert(picture);
}
test('galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg');
</script>
alerter den præcis galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg
Avatar billede nielle Nybegynder
26. juni 2005 - 19:48 #2
Det gør den også hos mig - både i MSIE og i FireFox.
Avatar billede per1291 Nybegynder
27. juni 2005 - 00:42 #3
Det samme gælder i Opera og Netscape.
Tegnene kan kun ændres vha. en unescape-funktion.
Måske er du kommet til at bruge denne funktion et sted i programmet?
Avatar billede roenving Novice
27. juni 2005 - 00:50 #4
Men hvis man prøver:

function test(picture){
  location.href=picture;
}

ændrer de fleste browsere !-)
Avatar billede jonashn Nybegynder
27. juni 2005 - 13:04 #5
Det er vel fordi det er en url?
Avatar billede dennism Nybegynder
27. juni 2005 - 15:04 #6
Nu skal jeg prøve, om jeg kan beskrive hvad mit problem er. :)

Jeg har følgende side:
http://www.demaweb.dk/sites/gandrup-sportsklub/index.php?action=galleri&lib=Cykelløb%202005

Når man trykker på billederne, kaldes et script. F.eks.:
showpic('galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg','Cykelløb 2005/Sponsorcykellob_2004.jpg');

showpic-funktionen ser ud som følger:

function showpic(picture, title){
        NewWin = window.open('picturepopup.php?pic=' + picture + '&title=' + title, 'picture', 'width=150,height=150,resizable');
        NewWin.focus();
}

Denne funktioen, åbner et nyt vindue, som I dette tilfælde hedder:
picturepopup.php?pic=galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg&title=Cykelløb 2005/Sponsorcykellob_2004.jpg

Problemet er her, at det lader til at IE selv laver linket om til (kan jeg se, ved at kigge på kilde-koden i picturepopup.php når den er åbnet):
picturepopup.php?pic=galleri/Cykelløb%202005/Sponsorcykellob_2004.jpg=Cykelløb 2005/Sponsorcykellob_2004.jpg

Dette betyder, at billedet ikke kan vises i popup-vinduet.

Er der nogen der kan hjælpe mig med at løse dette problem?
Avatar billede nielle Nybegynder
27. juni 2005 - 18:03 #7
Jeg hælder mest en mistanke om at det er den sti som du angiver til billedet som ikke er helt korrekt. Kan du ikke lige fortælle, hvilken sti man skal indtaste direkte i browserens adresselinje, hvis man f.eks. vil se billedet:

Sponsorcykellob_2004.jpg

- uden skulle igennem dine to showpic(...) og picturepopup.php?
Avatar billede per1291 Nybegynder
27. juni 2005 - 18:23 #8
Prøv at udelade titlen, go se om det så virker.
Der kan være problemer med dit variabelnavn "title" (uden at jeg i øvrigt kender php).

Hilsen  Per
Avatar billede per1291 Nybegynder
27. juni 2005 - 23:48 #9
Spørgsmålet "Erstatte %20 med mellemrum", som findes 1 side længere tilbage i vores database, indeholder løsningen. Spørgsmålet er oprettet af brugeren "net-city".

Hilsen  Per
Avatar billede per1291 Nybegynder
27. juni 2005 - 23:58 #10
I øvrigt vil jeg gerne vide, om det er tilladt for en person at oprette flere brugerprofiler?
Jeg har ikke nærlæst reglerne, men jeg tror ikke det kan være i orden.

Per Andersen
Avatar billede roenving Novice
27. juni 2005 - 23:59 #11
Det er klart imod reglerne, så du skal måske lave en anmeldelse ?-)
Avatar billede per1291 Nybegynder
28. juni 2005 - 00:38 #12
Hej roenving !

Nu har jeg cyklet rundt i menuerne på Eksperten.dk i et stykke tid - jeg syntes bestemt at der var en klikmulighed "Anmeld misbrug", men jeg kan altså ikke finde den.
Betragt derfor den følgende tekst som en anmeldelse:

Til Coadmin!
Jeg har mistanke om, at en bestemt bruger opererer på dette forum under flere navne.
Venligst kontakt mig pr email, så vil jeg udbygge min påstand.

Hilsen  Per
Avatar billede roenving Novice
28. juni 2005 - 00:54 #13
Under funktioner oppe til venstre vil du straks finde muligheden ...

-- jeg har også engang imellem følt mig lidt dum, når jeg har opereret i internetfora, og om et øjeblik kommer jeg nødt til at gøre det igen, for hvis du ikke præcis angiver spørgsmålet, samtlige brugere, du har mistanke til, samt iøvrigt hvem du selv er, vil ingen i dette kongerige have en mulighed for at behandle klagen, for det nye coadmin-system er desværre opbygget således, at jeg skal gætte på om du overhovedet har deltaget i en tråd, hvis du ikke meget nøjagtigt angiver disse oplysninger ,-(
Avatar billede dennism Nybegynder
28. juni 2005 - 11:20 #14
Her er lige en opdatering af mit indlæg 27/06-2005 15:04:47:



Nu skal jeg prøve, om jeg kan beskrive hvad mit problem er. :)

Jeg har følgende side:
http://www.demaweb.dk/sites/gandrup-sportsklub/index.php?action=galleri&lib=Cykelløb%202005

Når man trykker på billederne, kaldes et script. F.eks.:
showpic('galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg','Cykelløb 2005/Sponsorcykellob_2004.jpg');

showpic-funktionen ser ud som følger:

function showpic(picture, title){
        NewWin = window.open('picturepopup.php?pic=' + picture + '&title=' + title, 'picture', 'width=150,height=150,resizable');
        NewWin.focus();
}

Denne funktioen, åbner et nyt vindue, som I dette tilfælde hedder:
picturepopup.php?pic=galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg&title=Cykelløb 2005/Sponsorcykellob_2004.jpg

Problemet er her, at det lader til at IE selv laver linket om til (kan jeg se, ved at kigge på kilde-koden i picturepopup.php når den er åbnet):
picturepopup.php?pic=galleri/Cykelløb%202005/Sponsorcykellob_2004.jpg&title=Cykelløb 2005/Sponsorcykellob_2004.jpg

Dette betyder, at billedet ikke kan vises i popup-vinduet. Da den automatisk ændrer "Cykell%F8b%202005" til "Cykelløb%202005" opstår problemet.
Selve billedefilen ligger her:
http://www.demaweb.dk/sites/gandrup-sportsklub/galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg

I picturepopup.php henter jeg variablen "pic" ind med som $_GET[pic], og det er altså denne som jeg sætter som src i mit img-tag. Det lader altså til, at PHP så selv ændrer "%F8" til "ø". Men hvorfor pokker gør det det? Jeg skal bare have PHP til at udskrive den adresse som står i url'ens pic-variabel, eller hvad det nu hedder.

Forstår I hvad problemet er?
Avatar billede per1291 Nybegynder
28. juni 2005 - 16:22 #15
<script type ="text/javascript">
window.open("http://www.demaweb.dk/sites/gandrup-sportsklub/galleri/Cykell%F8b%202005/Sponsorcykellob_2004.jpg")
</script>

virker som det skal.
Så du har nok ret i, at det er php der laver bøvl.
Avatar billede nielle Nybegynder
28. juni 2005 - 19:05 #16
Der er ikke noget specielt mistænkeligt i at PHP urldecoder data. Den eneste grund til at man urlencoder data i første omgang er for at sikre at de kan indgå på en ”pæn” måde i et url. Normalt vil der efterfølgende skulle urldecodes i den anden ende for at data giver mening. Det kan meget vel tænkes at PHP gør dette ganske automatisk – simpelthen af venlighed overfor programmørene.

Hvis teorien holder stik, skulle løsningen ligge lige for - nemlig at urlencode igen i PHP:

http://dk2.php.net/urlencode
Avatar billede thesurfer Nybegynder
29. juni 2005 - 11:53 #17
Gode råd når man arbejder med filnavn:
- de må ikke indeholde mellemrum (" "), "æ,ø,å" (kun a-z, store og små), andre specielle tegn ("!#¤%&/()=" osv..)

Dvs: Cykelloeb_2005

Og husk: På Linux servere (der normalt bruges til PHP), er der forskel på store og små bogstaver. Dvs, "Hej" er ikke det samme som "hEj" eller "heJ".

/theSurfer
Avatar billede thesurfer Nybegynder
29. juni 2005 - 11:54 #18
PS: Ang. filnavn: De må også indeholde: tal (0-9), bindestreng ("-"), underscore ("_")

Det var sådan ca det..

/theSurfer
Avatar billede dennism Nybegynder
29. juni 2005 - 15:34 #19
Hvis jeg kører en "urlencode" laver den det om til:

galleri%2FCykell%F8b+2005%2FSponsorcykellob_2004.jpg

Det dur jo naturligvis heller ikke, når den også lave / om.
Avatar billede nielle Nybegynder
29. juni 2005 - 17:32 #20
Dem kan du jo efterfølgende "unencode":

<?php
$encodedValue = "galleri%2FCykell%F8b+2005%2FSponsorcykellob_2004.jpg";
undtagenSlashes = str_replace("%2F", "/", $encodedValue);
?>

Note: Jeg har nu fået verificeret at der er indbygget en automatisk urldecode i $_GET[...]. Faktisk bør man af sikkerhedshensyn ikke urldecode variable, man har modtaget via $_GET, idet ondsindede hackertyper kan bruge sådant et dobbelt-urldecode til at snige skadelig kode ofrbi diverse sikkerhedstjek:

http://dk2.php.net/urldecode
Avatar billede nielle Nybegynder
29. juni 2005 - 17:33 #21
thesurfer> Der er andre tegn som er tilladte, f.eks. punktum.
Avatar billede dennism Nybegynder
30. juni 2005 - 10:33 #22
Den har jo også ændret "Cykell%F8b%202005" til "Cykell%F8b+2005".

Er det bare "+" der skal ændres til "%20"?
Avatar billede dennism Nybegynder
30. juni 2005 - 11:54 #23
Nielle..smider du lige et svar?
Avatar billede per1291 Nybegynder
30. juni 2005 - 12:05 #24
Du kunne godt ændre + til %20. Men måske vil der vise sig flere undtagelser, når du bruger andre navne en dag. Jeg tror det må kunne gøres smartere.

Vi ved altså, at der foretages en urldecode. Derfor vil det måske være en løsning, simpelthen at urlencode adressen, før man sender den.

Jeg kender ikke funktionen urlencode, men hvis den gør præcis det samme som en escape, så ville dette være den eneste nødvendige ændring:

function showpic(picture, title){
        NewWin = window.open('picturepopup.php?pic=' + escape(picture) + '&title=' + title, 'picture', 'width=150,height=150,resizable');
        NewWin.focus();
}

Det kunne da være det virker...

Hilsen  Per
Avatar billede nielle Nybegynder
30. juni 2005 - 17:42 #25
per1291> Brug af escape og urlencode'ning er ikke det samme. I JavaScript er det derimod funktionen encodeURI() der skal bruges.
Avatar billede nielle Nybegynder
30. juni 2005 - 17:42 #26
... oge et svar :^)
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