contras_t: Sonderzeichen werden trotz utf-8 falsch dargestellt

Hej!

Ich arbeite gerade an meinem neuen online-Portfolio und habe ein Problem mit der Codierung.
Die ganze Sache läuft über Wordpress.

Der Link zur Seite: LINK

Die falsche kodierung fällt auf, wenn man etwas runterscrollt und in das Menü (wird sichtbar wenn man die Maus zum oberen Fensterrand führt) schaut. Vor den Menüpunkten (bisher testweise nur ein Link) habe ich per

  
#navigation_content a:before{  
 content: '\006958';  
 display:inline-block;  
 margin-right:5px;  
 -webkit-transition: -webkit-transform 0.3s ease-out;  
 -moz-transition: -moz-transform 0.3s ease-out;  
 -o-transition: -o-transform 0.3s ease-out;  
 -ms-transition: -ms-transform 0.3s ease-out;  
 transition: transform 0.3s ease-out;  
 }  

ein Zeichen eingefügt, eigentlich ein Dreieck, gezeigt wird aber irgendein chinesisches Schriftzeichen.

Mein Headbereich:

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" lang="de">  
	<head profile="http://gmpg.org/xfn/11">  
		<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />  
		<title><?php wp_title(); ?> <?php bloginfo('name'); ?></title>  
		<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />  
		<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />  
		<link rel="stylesheet" type="text/css" href="//releases.flowplayer.org/5.4.3/skin/minimalist.css"><!-- flowplayer CSS -->  
		<link href="wp-content/themes/portfolio/jquery.bxslider.css" rel="stylesheet" type='text/css'/><!-- bxSlider CSS file -->  
		<link href='http://fonts.googleapis.com/css?family=Raleway:100' rel='stylesheet' type='text/css'><!-- Schriftart -->  
		<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script><!-- jQuery library (served from Google) -->  
		<script src="wp-content/themes/portfolio/jquery.bxslider.min.js" type="text/javascript"></script><!-- bxSlider Javascript file -->  
		<script src="wp-content/themes/portfolio/slider.js" type="text/javascript"></script><!--bxSlider js configurations -->  
		<script src="wp-content/themes/portfolio/navigation.js" type="text/javascript"></script><!-- Navigation ausblenden js script -->  
		<script src="//releases.flowplayer.org/5.4.3/flowplayer.min.js" type="text/javascript"></script><!-- flowplayer javascript component -->  
		<?php wp_head(); ?>  
	</head>  

Weiß jemand woran es liegt und wie ich es beheben kann?

Danke und LG

PS: Inhalt verlangt noch keine Beachtung! ;)

  1. @@contras_t:

    nuqneH

    habe ich per
    content: '\006958';
    ein Zeichen eingefügt, eigentlich ein Dreieck,

    Nö, isses nicht. U+6958 _ist_ ein CJK-Zeichen: 楘.

    gezeigt wird aber irgendein chinesisches Schriftzeichen.

    Nichts aber. Du bekommst, was du angibst.

    Beachte, dass Codepoints immer hexadezimal angegeben werden. Allerdings ist auch U+1B2E (dezimal 6958) kein Dreick, sondern BALINESE LETTER LA.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. @@contras_t:

    nuqneH

    -webkit-transition: -webkit-transform 0.3s ease-out;
    -moz-transition: -moz-transform 0.3s ease-out;
    -o-transition: -o-transform 0.3s ease-out;
    -ms-transition: -ms-transform 0.3s ease-out;
    transition: transform 0.3s ease-out;

    Einen -ms-Präfix hat es für 'transition' nie gegeben.* -moz- ist auch schon seit Ewigkeiten nicht nötig. Weg damit!

    Ob du -o- für alte Prestos noch brauchst, musst du wissen. Ich denke nein.

    http://caniuse.com/css-transitions

    Qapla'

    * außer vielleicht für Testversionen

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  3. @@contras_t:

    nuqneH

    Die falsche kodierung fällt auf,

    Nein, da ist keine falsche Zeichencodierung, denn

    content: '\006958';

    besteht nur aus ASCII-Zeichen.

    Und BTW, Nicht-ASCII-Zeichen sind *keine* „Sonderzeichen“. Sondern ganz normale Zeichen einer bestimmten Schrift.

    Sonderzeichen sind Zeichen, die *in einem bestimmten Kontext* eine Sonderbedeutung haben und deshalb kontextgerecht escapet werden müssen.

    In obiger Codezeile ist \ ein solches, da es in CSS ein Zeichenescape einleitet. In HTML sind < und & Sonderzeichen, in Attributwerten auch " bzw. '.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. @@Gunnar Bittersmann:

      nuqneH

      content: '\006958';

      besteht nur aus ASCII-Zeichen.

      Und allgemein ist die Empfehlung, Zeichen nicht zu escapen, sondern

      content: '楘';

      zu schreiben (du willst natürlich dein Dreieck), dafür eine entsprechende Zeichencodierung zu verwenden und diese auch anzugeben.

      Qapla'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      1. allgemein ist die Empfehlung, Zeichen nicht zu escapen, sondern

        content: '楘';

        zu schreiben

        Danke für den Hinweis, ich dachte dass es gerade zu Problemen führen würde, wenn man die Zeichen einfach so in den Code setzt.

        Wieder was gelernt.

      2. Hallo!

        Und allgemein ist die Empfehlung, Zeichen nicht zu escapen, sondern
        content: '楘';
        zu schreiben (du willst natürlich dein Dreieck), dafür eine entsprechende Zeichencodierung zu verwenden und diese auch anzugeben.

        Was spricht gegen eine whitelist?

        Grüße, Matze

        1. Moin,

          Und allgemein ist die Empfehlung, Zeichen nicht zu escapen, sondern
          content: '楘';
          zu schreiben (du willst natürlich dein Dreieck), dafür eine entsprechende Zeichencodierung zu verwenden und diese auch anzugeben.
          Was spricht gegen eine whitelist?

          hast du dich eventuell im Thread vertan? Weil deine Antwort so überhaupt nicht zum Thema passt?

          Schönes Wochenende,
           Martin

          --
          Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
          Heißes Wasser kann man immer gebrauchen.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hallo Martin!

            hast du dich eventuell im Thread vertan? Weil deine Antwort so überhaupt nicht zum Thema passt?

            Nicht wirklich. Es ging mir darum:
            Aus dem Link von Gunnar:
            "Wenn für alle Nicht-ASCII-Zeichen numerische Zeichenreferenzen verwendet werden, wird die Passage unlesbar, schwierig zu pflegen und deutlich länger. Es wäre natürlich noch schlimmer bei einer Sprache, die überhaupt keine lateinischen Buchstaben verwendet.

            Jako efektivn&#x115;j&#x161;&#xED; se n&#xE1;m jev&#xED; po&#x159;&#xE1;d&#xE1;n&#xED; tzv. Road Show prost&#x159;ednictv&#xED;m na&#x161;ich autorizovan&#xFD;ch dealer&#x16F; v &#x10C;ech&#xE1;ch a na Morav&#x11B;, kter&#xE9; prob&#x11B;hnou v pr&#x16F;b&#x11B;hu z&#xE1;&#x159;&#xED; a &#x159;&#xED;jna."

            Dagegen diese Artikel hier und hier.

            Eine whitelist würde sich doch also eher anbieten anstatt der Rat "Zeichen nicht zu escapen". Oder wo ist hier mein Denkfehler?

            Grüße, Matze

            1. Tach!

              Eine whitelist würde sich doch also eher anbieten anstatt der Rat "Zeichen nicht zu escapen". Oder wo ist hier mein Denkfehler?

              Es geht hier darum, Zeichen, die man selbst und zwar direkt in den Code schreibt, als Zeichen zu schreiben und nicht in irgendeiner Ersatzschreibweise. Es geht hier nicht darum, Benutzereingaben zu verarbeiten.

              Dagegen diese Artikel hier und hier.

              Um zumindest mal den ersten Artikel zu kommentieren (ungeachtet dessen, dass er nicht zum vorliegenden Thema passt):

              UTF-7 (nicht 8) zu verwenden, ist eher ein akademisches Problem. Man muss das absichtlich als Programmierer tun und dann hat man noch ganz andere Probleme zu bewältigen, als Nutzereingaben sicher wieder auszugeben. Der Fall muss nicht weiter betrachtet werden.

              Bei weggelassenen Anführungszeichen um Attributwerte muss man sich im Klaren sein, dass man nun nicht in einem String-Kontext ist. Ein Escaping ist nur bedingt sinnvoll. Das Hauptproblem ist, dass man im HTML-Modus bleibt und alles nach dem ersten Leerzeichen als Code interpretiert wird. Attributwerte ohne Anführungszeichen zu verwenden und dann noch Benutzereingaben (oder andere variable Werte) einzufügen ist grob fahrlässig seitens des Programmieres. htmlentities()/htmlspecialchars() verspricht auch nicht, alle Sicherheitsprobleme zu lösen. Noch dazu dann nicht, wenn der Programmierer die Problematik nicht verstanden hat, sondern einfach nur stur irgendwas anwendet, weil das angeblich Sicherheit bringt.

              Ebenfalls fahrlässig ist es, Nutzereingaben direkt als href-Inhalt zu verwenden. Nutzer mit Backlinks zum Kommentieren anzuregen, regt vor allem Spammer an, dies zu tun. Wer als Webseitenbetreiber diese Back-Links dann nicht zumindest kontrolliert, sollte sich selbst als Teil des Sicherheitsrisikos betrachten.

              dedlfix.

            2. Hallo,

              hast du dich eventuell im Thread vertan? Weil deine Antwort so überhaupt nicht zum Thema passt?
              Nicht wirklich. [...]
              Eine whitelist würde sich doch also eher anbieten anstatt der Rat "Zeichen nicht zu escapen". Oder wo ist hier mein Denkfehler?

              mir ist der Zusammenhang nicht klar geworden, den du gemeint hast, weil du möglicherweise einem Missverständnis aufgesessen bist.

              Denn schließlich empfiehlt Gunnar doch gerade, Zeichen der Lesbarkeit zuliebe _generell_nicht_ zu escapen, sondern stattdessen eine geeignete Zeichencodierung zu wählen (z.B. UTF-8), damit man die Zeichen dann im Klartext notieren kann.

              Wie passt also deine Idee mit der Whitelist noch in dieses Denkschema? Wozu?

              Ciao,
               Martin

              --
              Idealismus wächst mit der Entfernung zum Problem.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Hallo!

                mir ist der Zusammenhang nicht klar geworden, den du gemeint hast, weil du möglicherweise einem Missverständnis aufgesessen bist.

                Nee, eher ganz sicher. Ich war bei der Behandlung von Benutzer-Eingaben bei der Ausgabe in HTML und nicht bei hart-kodierten Zeichen. Frag nicht! Ich bin ja schon leise... ;)

                Grüße, Matze