Sonderzeichen in Klassennamen
Cheatah
- html
0 Malcolm Beck´s0 MudGuard0 Elya0 Cheatah
0 Christian Seiler0 Cheatah
Hi,
laut Spezifikation bestehen Klassennamen aus CDATA, dürfen also im großen und ganzen "alles" enthalten. Das ist gut, da ich momentan über Klassen ein Problem generischer Werteübergaben zu lösen versuche, in denen beispielsweise das Komma recht häufig vorkommt. Letztendlich zu erwarten ist im Prinzip alles, was auf einer handelsüblichen Tastatur aufgedruckt ist. Effektiv könnte ein Code so aussehen:
<div class="namespace-foo-bar/qäz,bäz namespace-qaz-baz$qu_ux&quuux">
So weit, so schrecklich. Natürlich wittere ich diverse Probleme mit beinahe ebenso diversen Browsern - finde jedoch keine Informationen dazu. Laut Web Devout wird das class-Attribut browserübergreifend uneingeschränkt unterstützt, wobei zu einigen Browsern keine Informationen vorliegen; ich weiß allerdings nicht, inwieweit mein Problem in die Tests eingeflossen ist.
Hat jemand Erfahrung mit "exotischen" Klassennamen in HTML? Welche Zeichen sind - neben Buchstaben, Ziffern[1], Binde- und Unterstrich[2] - definitiv unproblematisch? Welche Form der Maskierung[3] bietet sich mit welchem Escape-Zeichen an?
Cheatah
[1] Alle Klassen beginnen mit einem Prefix ("namespace-"), so dass eventuelle Querelen mit Ziffern o.ä. am Anfang ausgeschlossen sind.
[2] Netscape 4 ist außen vor.
[3] Ich tendiere zu URL- bzw. Quoted-Printable-artiger Maskierung, bin mir vor allem wegen des Escape-Zeichens unsicher.
hi,
Hat jemand Erfahrung mit "exotischen" Klassennamen in HTML? Welche Zeichen sind - neben Buchstaben, Ziffern[1], Binde- und Unterstrich[2] - definitiv unproblematisch? Welche Form der Maskierung[3] bietet sich mit welchem Escape-Zeichen an?
Das hat mich jetzt auch interessiert, daher habe ich mal eine Testseite angelegt, allerdings scheint es da nicht all zuviel Spielraum zu geben.
Bei mir funktionieren lediglich 2 und 5 wie sie sollen.
Oder meintest du was anderes?
grüße
Hi,
/beispiele/selfhtml/
Bei mir funktionieren lediglich 2 und 5 wie sie sollen.
6 bis 12 haben als Klassennamen nur aber! - der Rest ist wegen des ", welches das class-Attribut beendet, nicht Teil des Klassennamens.
Wenn ich das richtig verstanden habe, will Cheatah nur im HTML die Daten speichern, diese Klassennamen aber nicht für CSS verwenden.
In CSS gelten ja andere Spielregeln, da müssen die Sonderzeichen CSS-mäßig escaped werden.
cu,
Andreas
hi,
@@Cheatah,
Bei den Nummern 6 bis 12 müsstest Du zumindest das Doublequote innerhalb des class-Attributs als """ schreiben, sonst hast Du schon mal einen HTML-Fehler :-)
Ist bereinigt, ich kann doch nichts dafür, ich bin Müde! :)
Das stellt für mich aber kein Problem dar - ich muss die Klassen eigentlich nur auslesen und verarbeiten können, d.h. insbesondere muss es eine Möglichkeit geben, dass über den HTML-Code (also das class-Attribut) "beliebige" Zeichen so übergeben werden, dass sie im JavaScript-Code wie gewünscht ankommen.
Dieser Gedanke war mir auch durch den Kopf geschossen, Javascript, da ich davon aber keine Ahnung hab, hab ich mal nichts dazu gesagt und halt mich dann auch wieder raus. :)
@@MudGuard
In CSS gelten ja andere Spielregeln, da müssen die Sonderzeichen CSS-mäßig escaped werden.
Wie escaped man denn CSS-mäßig, ich werd jetzt mal Googlen, fragen tu ich trotzdem. :)
grüße
hi,
In CSS gelten ja andere Spielregeln, da müssen die Sonderzeichen CSS-mäßig escaped werden.
Wie escaped man denn CSS-mäßig, ich werd jetzt mal Googlen, fragen tu ich trotzdem. :)
Hat sich erledigt.
grüße
Hi,
Ist bereinigt, ich kann doch nichts dafür, ich bin Müde! :)
angenehm, I am thirsty ("Ich bin Donnerstag")!
-- Frei nach Otto :-)
Dieser Gedanke war mir auch durch den Kopf geschossen, Javascript, da ich davon aber keine Ahnung hab, hab ich mal nichts dazu gesagt und halt mich dann auch wieder raus. :)
Alles klar, merci fürs Intermezzo!
Cheatah
Hi,
Das hat mich jetzt auch interessiert, daher habe ich mal eine Testseite angelegt, allerdings scheint es da nicht all zuviel Spielraum zu geben.
danke für Deine Mühe!
Bei mir funktionieren lediglich 2 und 5 wie sie sollen.
Bei den Nummern 6 bis 12 müsstest Du zumindest das Doublequote innerhalb des class-Attributs als """ schreiben, sonst hast Du schon mal einen HTML-Fehler :-) Darüber hinaus bekommst Du beim CSS Probleme, weil die Selektoren so natürlich ungültig sind.
Das stellt für mich aber kein Problem dar - ich muss die Klassen eigentlich nur auslesen und verarbeiten können, d.h. insbesondere muss es eine Möglichkeit geben, dass über den HTML-Code (also das class-Attribut) "beliebige" Zeichen so übergeben werden, dass sie im JavaScript-Code wie gewünscht ankommen.
Cheatah
Hi,
laut Spezifikation bestehen Klassennamen aus CDATA, dürfen also im großen und ganzen "alles" enthalten. Das ist gut, da ich momentan über Klassen ein Problem generischer Werteübergaben zu lösen versuche, in denen beispielsweise das Komma recht häufig vorkommt. Letztendlich zu erwarten ist im Prinzip alles, was auf einer handelsüblichen Tastatur aufgedruckt ist.
Solange Du die betroffenen class-Attribute nicht anderweitig verwendest, sollten höchstens die HTML-Sonderzeichen < > und & sowie entweder " oder ' (abhängig davon, welches der beiden als Attributwertbegrenzer genutz wird) problematisch sein.
Wenn die class-Attribute auch noch in CSS-Selektoren Verwendung finden, muß im CSS natürlich entsprechend (kontext-spezifisch) escaped werden (backslash x hexcode IIRC). Problematisch könnte dabei dann aber auch noch jeglicher Whitespace werden (da im class-Attribut ja mehrere whitespace-getrennte Klassennamen stehen dürfen).
cu,
Andreas
Hi,
Solange Du die betroffenen class-Attribute nicht anderweitig verwendest, sollten höchstens die HTML-Sonderzeichen < > und & sowie entweder " oder ' (abhängig davon, welches der beiden als Attributwertbegrenzer genutz wird) problematisch sein.
definiere "anderweitig". Ich möchte den Wert mit JavaScript auf geeignete Weise weiterverwenden, also dekodieren, neu kodieren und in einer URL verwenden. Da ist aus meiner Sicht nur das Problem, welche Zeichen (nicht) kodiert werden müssen - und abhängig davon, welches das Escape-Zeichen sein kann. Der Unterstrich ist hierfür übrigens eher ungeeignet, da er im speziellen Use-Case zu häufig vorkommt ... man muss es ja nicht komplizierter machen, als es ist ;-)
Ach ja, und HTML-kodiert wird selbstverständlich ebenfalls :-)
Wenn die class-Attribute auch noch in CSS-Selektoren Verwendung finden, muß im CSS natürlich entsprechend (kontext-spezifisch) escaped werden (backslash x hexcode IIRC).
Jo, das fällt wegen der Generik der Werte eher flach. Zum Glück ist das auch nicht gewollt ...
Problematisch könnte dabei dann aber auch noch jeglicher Whitespace werden (da im class-Attribut ja mehrere whitespace-getrennte Klassennamen stehen dürfen).
Sicher, sicher. Aber was ist denn nun _un_problematisch? ;-)
Cheatah
Hi,
Solange Du die betroffenen class-Attribute nicht anderweitig verwendest, [....]
Wenn die class-Attribute auch noch in CSS-Selektoren Verwendung finden, [...]
Vielleicht finden sie ja Verwendung, ohne dass dies ueberhaupt beabsichtigt ist - insb. in aelteren IE-Version koennte ich mir das zumindest durchaus vorstellen, dass dann Selektoren auch auf "teilweise" passende Klassen angewendet werden, wenn deren "Parsing" bei Sonderzeichen abgebrochen wird o.ae. ...
Vielleicht darf Cheatah dann ja auch bald einen neuen Hack nach sich benennen :-)
MfG ChrisB
Hallo Cheatah,
Hat jemand Erfahrung mit "exotischen" Klassennamen in HTML? Welche Zeichen sind - neben Buchstaben, Ziffern[1], Binde- und Unterstrich[2] - definitiv unproblematisch? Welche Form der Maskierung[3] bietet sich mit welchem Escape-Zeichen an?
Mediawiki z.B. baut den Lemmanamen als Klassennamen in jede Seite ein, was dann zu solchen Konstrukten führt:
11'9"01 – September 11 wird zu <body class="mediawiki ns-0 ltr page-11_09_01_–_September_11">
oder Die Abbots – wenn Haß die Liebe tötet zu <body class="mediawiki ns-0 ltr page-Die_Abbotts_–_Wenn_Haß_die_Liebe_tötet">
oder **** erstaunlicherweise zu <body class="mediawiki ns-0 ltr page-">
Ampersand, Zollzeichen und Sternchen werden also offenbar einfach rausgefiltert, ansonsten habe ich schon ziemlich viel darin gesehen. Mir bekanntes Problem ist zur Zeit nur, daß der Highlighter, der für Codedarstellung genutzt wird, bei einem Umlaut mit den Highlighten von CSS-Code abbricht. Mit weiteren Details dazu habe ich mich bislang aber zum Glück nicht befassen müssen, ich weiß auch nicht, wo noch ein Zugriff auf diese Klassennamen erfolgt.
Meine 2 Cents, vielleicht bringt's Dich einen kleinen Schritt weiter.
Gruß aus Köln-Ehrenfeld,
Elya
Hi,
Mediawiki z.B. baut den Lemmanamen als Klassennamen in jede Seite ein, was dann zu solchen Konstrukten führt:
11'9"01 – September 11 wird zu<body class="mediawiki ns-0 ltr page-11_09_01_–_September_11">
hm, da geht leider die Information, um welche Zeichen es sich handelte, verloren. Ich danke Dir aber für die Referenzen, die für mich zumindest ein Indiz darstellen, dass Umlaute nicht zwingend problematisch sind :-)
Cheatah
Hallo Cheatah,
Welche Form der Maskierung[3] bietet sich mit welchem Escape-Zeichen an?
Nach meinen kurzen Tests bietet sich IMHO quoted-printable mit = an, sowohl für JS als auch für CSS, siehe:
http://www.christian-seiler.de/temp/forum-20080514-klassen-kodierung.html
(Das nur zur Demo, dass = unproblematisch ist.)
Eventuell könnte man für Umlaute noch eine Ausnahme machen, bzw. soweit ich es sehen kann sind ferner alle Zeichen unproblematisch, die die Unicode-Eigenschaft "Letter" besitzen (würde mich darauf aber nicht unbedingt verlassen wollen).
Viele Grüße,
Christian
Hi,
Nach meinen kurzen Tests bietet sich IMHO quoted-printable mit = an, sowohl für JS als auch für CSS, siehe:
http://www.christian-seiler.de/temp/forum-20080514-klassen-kodierung.html
vielen Dank! IE 5.x nehmen zwar die CSS-Regeln nicht an, aber das wundert nicht. Vermutlich würden die ein <div class="\3d"><a>...</a></div> stylen ;-)
(Das nur zur Demo, dass = unproblematisch ist.)
Jepp, das nehme ich so mit. Ebenso wie die Information, dass offenbar noch niemand das Bedürfnis hatte, diesbezügliche Versuche zu unternehmen ... worauf ich ja eigentlich gehofft hatte. Nun ja, ich komme halt auf bekloppte Ideen :-)
Eventuell könnte man für Umlaute noch eine Ausnahme machen,
Das muss ich noch entscheiden, auch unter Berücksichtigung der Seitenkodierungen, mit denen ich arbeiten muss, sowie der Möglichkeiten der Zielsysteme (Generator des HTML-Codes sowie anschließend per JavaScript angesprochenes System). Letztlich wird das aber nur in der Ansage "kodiere Umlaute für die Klassennamen als <encoding>" resultieren, da sehe ich kein Problem mehr.
Ich nehme das "=" somit als Ergebnis an. Wenn sich doch noch jemand findet, der mit diesem Zeichen Probleme beobachtet hat oder mir für bestimmte Zeichen Unbedenklichkeit bescheinigen kann, freue ich mich natürlich über eine entsprechende Nachricht.
In diesem Sinne: Noch mal danke an alle Beteiligten!
Cheatah