Toon posts:

[javascript] Javascript verandert & sign in urls

Pagina: 1
Acties:

Verwijderd

Topicstarter
JavaScript:
1
2
3
4
5
6
7
8
9
<script language="javascript" type="text/javascript">
function show (content) {
    content = content.replace('&amp;','&');
    alert(content);
    document.getElementById('test').innerHTML =  content;
}
</script>
<div id="test"></div>
<script>show('<a href="&u=a">');</script>


Je zou verwachten dat de innerHTML gewoon &u=a wordt, maar hij verandert het gewoon naar &

Hoe kan ik dit voorkomen?

[ Voor 1% gewijzigd door een moderator op 07-03-2007 00:31 . Reden: even de codetags eromheen gezet :) ]


  • Osiris
  • Registratie: Januari 2000
  • Niet online
De alert() zet automagisch je &amp; weer om naar een &

Hm, toenet wel iig, nu ik ff verder test opeens weer niet 8)7

Verder snap ik niet echt wát je nou wil. Je wil een &amp; omzetten naar een &, terwijl er in de bron-string helemaal geen &amp; voorkomt, maar alleen een &? 8)7

[ Voor 73% gewijzigd door Osiris op 07-03-2007 00:43 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 10:16

momania

iPhone 30! Bam!

Je moet '&amp' escapen :)

JavaScript:
1
2
3
4
5
6
7
8
9
<script language="javascript" type="text/javascript">
function show (content) {
    content = content.replace('\&amp;','&');
    alert(content);
    document.getElementById('test').innerHTML =  content;
}
</script>
<div id="test"></div>
<script>show('<a href="&u=a">');</script>

[ Voor 3% gewijzigd door momania op 07-03-2007 00:44 ]

Neem je whisky mee, is het te weinig... *zucht*


  • Osiris
  • Registratie: Januari 2000
  • Niet online
momania schreef op woensdag 07 maart 2007 @ 00:43:
Je moet '&amp' escapen :)

JavaScript:
1
2
3
4
5
6
7
8
9
<script language="javascript" type="text/javascript">
function show (content) {
    content = content.replace('\&amp;','&');
    alert(content);
    document.getElementById('test').innerHTML =  content;
}
</script>
<div id="test"></div>
<script>show('<a href="&u=a">');</script>
Mwah, zelfs al staat er &amp; in de broncode van je HTML, de tekst die je bij Firefox in je statusbalk ziet (href) blijft gewoon &. Lijkt me sterk dat je de & moet escapen?

Sowieso vind ik het een beetje vreemde code. de replace()-functie vervangt de éérste attribuut door het twééde. En in de code die hier allemaal staat doet die replace() dus niets, want hij zoekt naar &amp; en die staat níet in de show()-functie. Dus what's the use of that? 8)7

Ik heb hier 't volgende stukkie code:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>Foo</title>
    <script type="text/javascript">
      function show (content) {
        content = content.replace('&','&amp;');
        alert(content);
        document.getElementById('test').innerHTML = content;
      }
    </script>
  </head>
  <body>
    <div id="test"></div>
    <script type="text/javascript">
      show('<a href="&u=a">Foo<\/a>');
    </script>
    <p>
      <a href="&amp;u=a">Bar</a>
    </p>
  </body>
</html>


Dit verandert de & in de show()-functie naar &amp;, zoals het hoort in URL's en pleurt die in de DIV. :)

[ Voor 30% gewijzigd door Osiris op 07-03-2007 01:00 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 11:13

crisp

Devver

Pixelated

replace heeft een reguliere expressie als argument. In het geval dat je een string meegeeft zal dat door de RegExp constructor worden heengehaald, maar dat resulteert niet in een global match. Ergo:
JavaScript:
1
content = content.replace(/&/g, '&amp;');

note dat dit enkel noodzakelijk is bij het gebruik van innerHTML e.d; bij DOM methods (bijvoorbeeld setAttribute('href', content);) hoef je niet te HTML-encoden.
Verder - zolang het karakter geen ambiguiteiten oplevert mbt bestaande entiteiten - zijn browsers prima in staat om een unescaped ampersand te verwerken (en wat als de ampersands al zijn encoded in je input? dubbele encoding levert meer problemen op dan geen encoding en de browser error-correctie laten uitvoeren).
Dat is enkel van belang in (echt) XHTML waar script-content als PCDATA wordt verwerkt en niet als CDATA. Dan nog moet je het HTML-encoden en niet script-escapen en zou je dus dit moeten doen vermits je het niet expliciet in een CDATA-instructie wrapped:
JavaScript:
1
content = content.replace(/&amp;/g, '&amp;amp;');


Bottomline: maak je niet druk om escaping van unencoded ampersands en/of gebruik gewoon DOM methods.

[ Voor 6% gewijzigd door crisp op 07-03-2007 10:16 ]

Intentionally left blank


Verwijderd

Topicstarter
Bedankt allemaal.

Het gaat hier om een functie die een Flash embed toevoegt met vars in de url, en flash pakt die niet als er
code:
1
&amp;
staat.

[ Voor 4% gewijzigd door Verwijderd op 07-03-2007 12:09 ]


Verwijderd

Topicstarter
Ik heb alle opties die jullie aandroegen geprobeert maar als ik via Web Developer toolbar in FF kijk blijven er gewoon & amp ; tekens staan.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 11:13

crisp

Devver

Pixelated

Je had dit al geprobeerd:
JavaScript:
1
content = content.replace(/&amp;/g, '&');

:?

Of probeer je een complete link inclusief query-vars zelf als query-var mee te geven? In dat laatste geval zal je namelijk moeten url-encoden

Intentionally left blank


Verwijderd

Topicstarter
Die heb ik ook geprobeerd, maar alsnog wordt de HTML:

code:
1
<div id="test"><a href="&amp;u=a">Foo</a></div>


Wat de uiteindelijk bedoeling is dat er een Flash bestand wordt toegevoegd die een aatal vars meekrijgt in de url.
Dus bijvoorbeeld flash.sqf?var1=foo&var2=foo.

Alleen nu pakt Flash die vars dus niet omdat hij de & niet 'ziet'.

Verwijderd

Topicstarter
Oke, ik heb het opgelost door alle & door ^ te vervangen en het in Flash weer in elkaar te zetten.

Bedankt voor de hulp.
Pagina: 1