/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Escaping '&'
Fra : Jesper Stocholm


Dato : 06-10-03 20:34

Skal tegn som '&' escapes i et javascript som i html-kode?

Når jeg spørger er det fordi jeg har noget eksisterende javascript som

if(confirm('Er du sikker på, at du vil slette?.')) {
   var strRedirectURI = '/dodelete/?id=' + strURI + '&dodelete=' + bDoDelete + '&checksum=' + strCheckSum;
   location.href = strRedirectURI;
   return false;
}
else
{ return false; }

Men jeg kan nu se at browsere på *Nix [1] ikke escaper disse tegn -
noget IE "naturligvis" gør uden videre. Mozilla opfører sig dog
som på *Nix også på Windows.

Skal jeg blot bruge '&' i stedet for '&' ?

[1]
Mozilla 1.1 på Sun/Sparc, Mozilla 1.3.1, Galeon 1.3.3 og
Konqueror 3.1.0 på Linux.

--
Jesper Stocholm - http://stocholm.dk
www.asp-faq.dk: FAQ for dk.edb.internet.webdesign.serverside.asp
www.usenet.dk/netikette/citatteknik.html: Skriv under det du svarer på
Svar venligt til gruppen og ikke til mig privat !

 
 
Lasse Reichstein Nie~ (06-10-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 06-10-03 23:49

Jesper Stocholm <j@stocholm.invalid> writes:

> Skal tegn som '&' escapes i et javascript som i html-kode?

Det kommer an på ...
1) hvor koden står,
2) HTML-versionen, og
3) om browseren opfører sig som den skal.

Det simpleste tilfælde er hvis JS-koden ligger i sin egen fil. Så skal
man aldrig bruge HTML's entitets-kodning. Det er kun hvis koden er del
af et (X)HTML-dokument at det er relevant.


I HTML 4.01 er både indholdet af script-tags og indholdet af
on<event>-attributterne af typen "%Script". DTD'en siger:
<!ENTITY % Script "CDATA" -- script expression -->

I CDATA bliver entiteter fortolket, så &amp; bliver til et og-tegn, og
et almindeligt og-tegn bliver taget som starten på en entitet. Dog
siger specificationen at entiteter i script- og style-elementer *ikke*
skal fortolkes.

Altså, i HTML 4 skal og-tegnet escapes hvis det optræder i en
attribut-værdi, men ikke hvis det optræder i et script-tag.

<URL:http://www.w3.org/TR/html4/types.html#type-cdata>

I XHTML 1.0 er indholdet af script- og style-elementer PCDATA, ikke
CDATA. I XHTML betyder det at entiteter blive fortolket. Altså skal
og-tegn escapes i script-elementer i XHTML (modsat HTML).

Det kan omgås ved at pakke sit script ind i en CDATA-sektion:
<script type="text/javascript">
// <![CDATA[
...
// ]]>
</script>
Dette XHTML betyder at indholdet mellem <![CDATA[ og ]]> bliver
fortolket som CDATA, hvilket betyder at entiteter ikke bliver
fortolket. Hvis browseren ikke forstår XHTML, så vil det virke
ligesådan som HTML.

<URL:http://www.w3.org/TR/xhtml1/#h-4.8>

Så er der problemet med browserne. IE forstår, så vidt jeg har ladet
mig forstå, ikke XHTML særlig godt. Hvis det ikke er XHTML, så er IE6,
Opera 7 og Mozille FB enige om at entiteter i scripts ikke skal
fortolkes.

> Når jeg spørger er det fordi jeg har noget eksisterende javascript som
>
> if(confirm('Er du sikker på, at du vil slette?.')) {
>    var strRedirectURI = '/dodelete/?id=' + strURI + '&amp;dodelete=' + bDoDelete + '&amp;checksum=' + strCheckSum;
>    location.href = strRedirectURI;

Her er to muligheder for at få &amp; fortolket. Den første mulighed er
som del af scriptet. Den anden mulighed er som del af URL'en. Jeg tror
det er den sidste mulighed der er den rigtige.

Jeg udførte følgende i de forskellige browsere:
---
var str = "http://www.infimum.dk/#test&test";
alert(str);
location.href=str;
---
Alerten viser klart at der står "&amp;" i strengen, ikke bare "&".
I Opera 7 og IE 6 bliver den resulterende URL i adresselinjen:
http://www.infimum.dk/#test&test
I Mozilla FB og Netscape 4 står der:
http://www.infimum.dk/#test&test
Altså er det browseren der forsøger at gætte hvad der menes med
entiteter i URL'en, og de er ikke enige.

Løsningen er måske at kode URL'en. Ret første linje i ovenstående til
var str = "http://www.infimum.dk/#test%26amp;test";
Det er alle browsere enige om. Serveren må så selv dekode at '%26' == '&'.

> Men jeg kan nu se at browsere på *Nix [1] ikke escaper disse tegn -
> noget IE "naturligvis" gør uden videre. Mozilla opfører sig dog
> som på *Nix også på Windows.

Mozilla fortolker ikke entiteter i en URL. IE gør. Konklusion: Undgå
og-tegn der kan misforstås.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'

Tobias Michaelsen (08-10-2003)
Kommentar
Fra : Tobias Michaelsen


Dato : 08-10-03 22:43

Jesper Stocholm wrote:

> Skal tegn som '&' escapes i et javascript som i html-kode?
>

Du skal ikke erstatte '&' med '&amp;' nå du bruger det i en tekststreng,
som du gør. (Med mindre at du havde tænkt dig at indsætte teksstrengen i
din html kode )

Det lader til at IE og Opera laver en klassisk
"du-mente-sikkert..."-erstatning for dig


Jesper Stocholm (08-10-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 08-10-03 23:36

Tobias Michaelsen wrote :

> Jesper Stocholm wrote:
>
>> Skal tegn som '&' escapes i et javascript som i html-kode?
>>
> Du skal ikke erstatte '&' med '&amp;' nå du bruger det i en
> tekststreng, som du gør. (Med mindre at du havde tænkt dig at indsætte
> teksstrengen i din html kode )
>
> Det lader til at IE og Opera laver en klassisk
> "du-mente-sikkert..."-erstatning for dig

Til jer begge:

Mit script er i en ekstern fil, og efter jeg har fjernet escaping'en, så
virker det som det skal.

Jeg ved ikke lige hvad jeg tænkte da jeg escapede min streng i mit
javascript.



--
Jesper Stocholm
http://stocholm.dk

Tillykke, Frederik og Mary

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste