Discussion:
Spitze Klammern in Variable übergeben
(zu alt für eine Antwort)
Benjamin Obernesser
2004-02-19 12:54:07 UTC
Permalink
Hallo Group.

Ich übergebe in einer Variable einen Nickname, der spitze Klammern
beinhalten darf, an ein Javascript.
Bevor der Wert der Variable gesetzt wird, werden die spitzen Klammern durch
php und "htmlspecialchars()" in html-Code umgewandelt. Merkwürdigerweise
wird der html-Code bei der Übergabe wieder in spitze Klammern umgewandelt.

Um die Umgebung kurz zu erläutern:

Auf meiner Web-Seite habe ich eine Sitzplan-Reservierung.
Beim hoovern über die Sitzplätze bekommt man die Sitzplatz-Informationen in
einer kleinen Tabelle angezeigt. Mit onmouseover werden die Variablen
übergeben.

onMouseOver="Sitzinfo('REIHE','PLATZ','<NICKNAME>');"

Das Javascript:

<script language="JavaScript">
<!--
function Sitzinfo(reihe,platz,teilnehmer) {
tabelleanfang = "<table><tr><td><table><tr><td>";
tabelleende = "</td></tr></table></td></tr></table>";
tabellegesamt = tabelleanfang+"Reihe
</td><td>"+reihe+"</td></tr><tr><td>Platz
</td><td>"+platz+"</td></tr><tr><td colspan=2>"+teilnehmer+tabelleende;
document.all.Infofenster.innerHTML = tabellegesamt;
}
//-->
</script>

Ich habe mit verschiedenen Nickname's experimentiert.
Bei <test>, wird der Name überhaupt nicht angezeigt.
Bei >test<, wird >test< angezeigt.
Bei te>test<st wird te>test angezeigt.

Ich steig nicht dahinter. Gibt es eine möglichkeit, spitze Klammern einer
Variable, in einem Javascript in html-Code umzuwandeln?

Gruß, Benjamin
Dietmar Meier
2004-02-19 13:11:18 UTC
Permalink
Post by Benjamin Obernesser
Ich übergebe in einer Variable einen Nickname, der spitze Klammern
beinhalten darf, an ein Javascript.
Bevor der Wert der Variable gesetzt wird, werden die spitzen Klammern
durch php und "htmlspecialchars()" in html-Code umgewandelt.
Merkwürdigerweise wird der html-Code bei der Übergabe wieder in
spitze Klammern umgewandelt.
http://www.w3.org/TR/html4/types.html#type-script
| Please note that script data that is element content may not contain
| character references, but script data that is the value of an
| attribute may contain them.

Als Abhilfe lasse serverseitig zweimal htmlspecialchars()
drüberlaufen, dann hast Du Dein gewünschtes Ergebnis.
Post by Benjamin Obernesser
<script language="JavaScript">
<!--
function Sitzinfo(reihe,platz,teilnehmer) {
tabelleanfang = "<table><tr><td><table><tr><td>";
tabelleende = "</td></tr></table></td></tr></table>";
^^böse ^^böse ^^böse^böse^böse

http://www.w3.org/TR/html4/appendix/notes.html#notes-specifying-data
| When script or style data is the content of an element (SCRIPT
| and STYLE), the data begins immediately after the element start
| tag and ends at the first ETAGO ("</") delimiter followed by a
| name start character ([a-zA-Z]); note that this may not be the
| element's end tag. Authors should therefore escape "</" within
| the content.

ciao, dhgm
Benjamin Obernesser
2004-02-19 13:48:16 UTC
Permalink
"Dietmar Meier" schrieb
Post by Dietmar Meier
Post by Benjamin Obernesser
Ich übergebe in einer Variable einen Nickname, der spitze Klammern
beinhalten darf, an ein Javascript.
Bevor der Wert der Variable gesetzt wird, werden die spitzen Klammern
durch php und "htmlspecialchars()" in html-Code umgewandelt.
Merkwürdigerweise wird der html-Code bei der Übergabe wieder in
spitze Klammern umgewandelt.
Als Abhilfe lasse serverseitig zweimal htmlspecialchars()
drüberlaufen, dann hast Du Dein gewünschtes Ergebnis.
ciao, dhgm
Jo. Danke hat geklappt. Das ging ja echt schnell. :-)

Gruß, Benjamin
Thomas 'PointedEars' Lahn
2004-02-19 13:15:35 UTC
Permalink
Post by Benjamin Obernesser
Hallo Group.
Hallo Poster.
Post by Benjamin Obernesser
Ich übergebe in einer Variable einen Nickname, der spitze Klammern
beinhalten darf, an ein Javascript.
Bevor der Wert der Variable gesetzt wird, werden die spitzen Klammern durch
php und "htmlspecialchars()" in html-Code umgewandelt. Merkwürdigerweise
wird der html-Code bei der Übergabe wieder in spitze Klammern umgewandelt.
[...]
Entities in Attributwerten vom Typ CDATA müssen interpretiert werden.
Intrinsische Event-Handler machen da keine Ausnahme. Wenn Du an das
Script "&lt;...&gt;" übergeben willst, so musst Du '&amp;lt;...&amp;gt;'
schreiben.
Post by Benjamin Obernesser
<script language="JavaScript">
Das type-Attribut ist für gültiges HTML erforderlich. Das
language-Attribut wird missbilligt und ist nur noch für ältere
Browser erforderlich:

<script type="text/javascript" ...>

Ausserdem solltest Du im head-Element des HTML-Dokuments das
meta-Element

<meta http-equiv="Content-Script-Type" content="text/javascript">

verwenden, um die Standard-Scriptsprache für intrinsische
Event-Handler zu definieren. Statt "text/javascript" geht
auch "application/x-javascript". Beides ist nicht
standardardisiert (es gibt dafür leider noch keinen Standard),
wird aber AFAIK entweder richtig verstanden oder ignoriert.
Post by Benjamin Obernesser
<!--
function Sitzinfo(reihe,platz,teilnehmer) {
tabelleanfang = "<table><tr><td><table><tr><td>";
tabelleende = "</td></tr></table></td></tr></table>";
ETAGO-Begrenzer ("</") innerhalb von script-Elementen sollten
mit "<\/" maskiert werden. Details siehe Google Groups.
Post by Benjamin Obernesser
tabellegesamt = tabelleanfang+"Reihe
</td><td>"+reihe+"</td></tr><tr><td>Platz
</td><td>"+platz+"</td></tr><tr><td colspan=2>"+teilnehmer+tabelleende;
document.all.Infofenster.innerHTML = tabellegesamt;
Ist Dir klar, dass sowohl document.all als auch die
innerHTML-Eigenschaft proprietär sind? Bei ersterem
verstehen es sogar nur der IE und, weil er versucht,
IE zu simulieren, Opera.
Post by Benjamin Obernesser
Ich steig nicht dahinter. Gibt es eine möglichkeit, spitze Klammern
einer Variable, in einem Javascript in html-Code umzuwandeln?
Ja, siehe oben.


PointedEars
Benjamin Obernesser
2004-02-19 13:49:32 UTC
Permalink
"Thomas 'PointedEars' Lahn" schrieb
Post by Thomas 'PointedEars' Lahn
Post by Benjamin Obernesser
Hallo Group.
Hallo Poster.
Post by Benjamin Obernesser
Ich übergebe in einer Variable einen Nickname, der spitze Klammern
beinhalten darf, an ein Javascript.
Bevor der Wert der Variable gesetzt wird, werden die spitzen Klammern durch
php und "htmlspecialchars()" in html-Code umgewandelt. Merkwürdigerweise
wird der html-Code bei der Übergabe wieder in spitze Klammern umgewandelt.
[...]
Entities in Attributwerten vom Typ CDATA müssen interpretiert werden.
Intrinsische Event-Handler machen da keine Ausnahme. Wenn Du an das
schreiben.
PointedEars
Danke. Das war die Lösung. :-)

Gruß, Benjamin
Thomas 'PointedEars' Lahn
2004-02-19 21:24:34 UTC
Permalink
Post by Thomas 'PointedEars' Lahn
Post by Benjamin Obernesser
<script language="JavaScript">
Das type-Attribut ist für gültiges HTML erforderlich. Das
language-Attribut wird missbilligt und ist nur noch für ältere
<script type="text/javascript" ...>
Ausserdem solltest Du im head-Element des HTML-Dokuments das
meta-Element
<meta http-equiv="Content-Script-Type" content="text/javascript">
verwenden, um die Standard-Scriptsprache für intrinsische
Event-Handler zu definieren. Statt "text/javascript" geht
auch "application/x-javascript". Beides ist nicht
standardardisiert (es gibt dafür leider noch keinen Standard),
wird aber AFAIK entweder richtig verstanden oder ignoriert.
Irrtum. Wie ich gerade herausgefunden habe, führt der IE 6 für Win2k
mit type="application/x-javascript" ausgezeichnete Script-Bereiche nicht
aus (Mozilla/5.0 schon). Da bleibt dann wohl wirklich nur, das auch
keinem standardisierten Schema ("x-" kennzeichnet nicht registrierte
MIME-Typen) entsprechende "text/javascript" zu benutzen. Wieder was
gelernt.


PointedEars

Loading...