Ankündigung

Einklappen
Keine Ankündigung bisher.

Verschiedene Kodierung innerhalb der selben Seite

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Verschiedene Kodierung innerhalb der selben Seite

    Hallo Community,

    ich stehe momentan vor einem doch sehr verwunderlichen Problem, von dem ich niemals erwartet hätte, es könnte vor mir auftauchen.


    Es geht um folgendes Problem:
    Die Ausgabe/Rückgabe eines Services der auf einer Website verwendet wird ist zwingend utf-8 und enthält entsprechend auch Zeichen des kompletten UTF-8 Zeichensatzes. Die Website, die diesen Service anzeigt ist kompromisslos in iso-8895-1 kodiert.

    Eine einfache dekodierung von utf-8 zu unicode und dann zu iso-8895-1 kommt nicht in Frage, da entsprechende Sonderzeichen durch die neue Kodierung nicht mehr dargestellt werden können.

    Da der Webmaster der Seite nicht willens ist, die Seite auf utf-8 umzustellen (was ich bei der Größe der Website nachvollziehen kann), habe ich nun folgende Frage.

    Gibt es eine Möglichkeit, einen Teil einer Website anders kodiert auszuliefern als den Rest? (Ich meine keine Unterseite sondern verschiedene Bereiche der gleichen Seite)

    Also in etwa so:
    Code:
    +-------------------------------------+
    |  iso-8895-1                         |
    |                                     |
    |                                     |
    |                     +--------+      |
    |                     | utf-8  |      |
    |                     +--------+      |
    +-------------------------------------+
    Nachtrag: Iframes scheiden natürlich aus.
    [IMG]http://media.ubuntuusers.de/portal/files/ubuntu.png[/IMG][IMG]http://sqlmanager.net/i/ico/mysql.gif[/IMG][SIGPIC][/SIGPIC]

  • #2
    Kann ich mir nicht vorstellen. Ein Dokument hat eine Kodierung. Ich wüsste nicht wie man da verschiedene Kodierungen hinbekommen sollte! Gerade wenn wenn du iFrames ausschließt sehe ich da keine Möglichkeit.

    Kommentar


    • #3
      Zitat von Frank
      Eine einfache dekodierung von utf-8 zu unicode und dann zu iso-8895-1 kommt nicht in Frage, da entsprechende Sonderzeichen durch die neue Kodierung nicht mehr dargestellt werden können.
      Wie wäre es mit Umkodieren und HTML-Entities?

      PHP: htmlentities - Manual

      Kommentar


      • #4
        IMHO geht das nicht.
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          PHP-Code:
          <?php

          // http://www.php.net/manual/en/function.htmlentities.php#96648
          //
          // When using UTF-8 as a charset, htmlentities will only convert 1-byte and
          // 2-byte characters. Use this function if you also want to convert 3-byte and
          // 4-byte characters
          //
          // converts a UTF8-string into HTML entities
          //  - $utf8:        the UTF8-string to convert
          //  - $encodeTags:  booloean. TRUE will convert "<" to "&lt;"
          //  - return:       returns the converted HTML-string
          function utf8tohtml($utf8$encodeTags) {
              
          $result '';
              for (
          $i 0$i strlen($utf8); $i++) {
                  
          $char $utf8[$i];
                  
          $ascii ord($char);
                  if (
          $ascii 128) {
                      
          // one-byte character
                      
          $result .= ($encodeTags) ? htmlentities($char) : $char;
                  } else if (
          $ascii 192) {
                      
          // non-utf8 character or not a start byte
                  
          } else if ($ascii 224) {
                      
          // two-byte character
                      
          $result .= htmlentities(substr($utf8$i2), ENT_QUOTES'UTF-8');
                      
          $i++;
                  } else if (
          $ascii 240) {
                      
          // three-byte character
                      
          $ascii1 ord($utf8[$i+1]);
                      
          $ascii2 ord($utf8[$i+2]);
                      
          $unicode = (15 $ascii) * 4096 +
                                 (
          63 $ascii1) * 64 +
                                 (
          63 $ascii2);
                      
          $result .= "&#$unicode;";
                      
          $i += 2;
                  } else if (
          $ascii 248) {
                      
          // four-byte character
                      
          $ascii1 ord($utf8[$i+1]);
                      
          $ascii2 ord($utf8[$i+2]);
                      
          $ascii3 ord($utf8[$i+3]);
                      
          $unicode = (15 $ascii) * 262144 +
                                 (
          63 $ascii1) * 4096 +
                                 (
          63 $ascii2) * 64 +
                                 (
          63 $ascii3);
                      
          $result .= "&#$unicode;";
                      
          $i += 3;
                  }
              }
              return 
          $result;
          }

          header('Content-Type: text/plain; charset=ISO-8859-1');

          $utf8Chars "\xC3\x84 \xC3\x96 \xC3\x9C \xC3\x9F \xE2\x82\xAC \xE5\x94\x90";

          echo 
          htmlentities($utf8Charsnull'utf-8'), "\n";
          echo 
          utf8tohtml($utf8Charstrue);
          Die Aussage, dass htmlentities nur mit 1- und 2-Byte-UTF8-Characters funktioniert, stimmt so allerdings nicht. Das Euro-Zeichen geht auch durch. Ich habe nicht weiter nachgeforscht.

          Kommentar

          Lädt...
          X