pto: PHP-/HTML-Zeichen-Problem

Hallo, ich lese feeds aus und habe dabei ein Zeichenproblem, Im Quelltext des ausgelesenen Feeds steht:

Künftig wird die Deutsche Entertainment AG (DEAG) aus Berlin das Nachfolge-Festival für &#8222Rock am Ring“ organisieren.

Ausgegeben wird auf meiner Seite:
. Künftig wird die Deutsche Entertainment AG (DEAG) aus Berlin das Nachfolge-Festival für ?Rock am Ring??organisieren.

Im Code steht das so (diese Sätze mit "Rock am Ring" sind Bestandteil der Feed-Description und werden in ein array gelesen:

  
$array[$zaehler] = utf8_decode($node2->nodeValue);  
$href = utf8_decode($href);  
$title = utf8_decode($title);  
  
         ?>  
                    <li class="tooltip" title="  
                    <?php echo htmlspecialchars ($array[$zaehler], ENT_QUOTES); ?>  
                    <a href='  
                    <?php echo htmlspecialchars ($href); ?>  
                    ' target='_blank'>...mehr</a>" >  
                    <?php echo htmlspecialchars($title, ENT_QUOTES); ?>  
                    </li>  
  
         <?php  

Gibt es eine Möglichkeit, dass die Zeichen wie &#8222 korrekt ausgegeben werden.

Gruß
pto

  1. Hello,

    Gibt es eine Möglichkeit, dass die Zeichen wie &#8222 korrekt ausgegeben werden.

    Wenn man sie auch corekkd notiert :-P

    Schon mal was von Semikolon gehört?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bikers-lodge.com
    1. Hello,

      Gibt es eine Möglichkeit, dass die Zeichen wie &#8222 korrekt ausgegeben werden.

      Wenn man sie auch corekkd notiert :-P

      Schon mal was von Semikolon gehört?

      Ja, das habe ja nicht ICH da reingeschrieben, ich lese das ja von einem fremden feed aus. In dem steht: Künftig werde die Deutsche Entertainment AG (DEAG) aus Berlin das Nachfolgefestival für &#8222Rock am Ring&ldquo;&ensp;am Nürburgring organisieren. &#8222Rock am Ring&ldquo;&ensp;wird die Eifel verlassen.
      Erstaunlicherweise wird &#8222 auch ohne Semikolon auf deren Seite SR als Anführungszeichen unten dargestellt.

  2. Meine Herren!

    Gibt es eine Möglichkeit, dass die Zeichen wie &#8222 korrekt ausgegeben werden.

    Ja das kann viele Ursachen haben. &8222; nennt man einen Entity. Wie Tom schon erklärt hat muss ein Entity immer mit einem &-Zeichen beginnen und mit einem Semikolon enden. Das &-Zeichen hat in HTML also die vorgeschriebene Bedeutung, dass es eine Entity-Sequenz einleitet. Die Funktion htmlspecialchars ist dafür gedacht, Zeichen, die in HTML schon eine reservierte Bedeutung haben in ihre Entities umzuwandeln. Wenn du also den String "&#8222;" in die Funktion htmlspecialchars reinsteckst, bekommst du daraus "&amp;8222;" Das &-Zeichen wurde also entschärft, der ursprüngliche Entity damit verstümmelt.

    Am einfachsten wäre es du notierst das „-Zeichen ganz gewöhnlich im Text. Bei richtiger Kodierung (i.d.R. UTF-8) und einer ansatzweisen vollständigen Schriftart gibt es dann keine Problem.

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Hallo,

      Gibt es eine Möglichkeit, dass die Zeichen wie &#8222 korrekt ausgegeben werden.
      Ja das kann viele Ursachen haben. &8222; nennt man einen Entity.

      das ist nicht ganz korrekt; Entity-Referenzen sind etwa &ouml; oder &nbsp; - also die benannten Zeichen. Was wir hier haben, ist eine numerische Zeichenreferenz (NCR), die noch dazu ungewohnt in dezimal formuliert ist. Normalerweise würde man das als &x201E; formulieren, weil Unicode-Zeichencodes gewöhnlich in hexadezimal angegeben werden.

      So, damit erstmal genug von den Korinthen.

      Wie Tom schon erklärt hat muss ein Entity immer mit einem &-Zeichen beginnen und mit einem Semikolon enden.

      Das Semikolon gehört zwar hin, aber die interne Fehlerkorrektur der Browser kommt meistens gut damit zurecht, wenn es fehlt - außer wenn dadurch eine Fehlinterpretation droht. So würde etwa das Fragment "paste&copy" als "paste©" interpretiert.

      Was pto hier aber schildert, ist widersprüchlich. Er sagt, dass &#8222 (ohne Semikolon) im Quelltext steht, den er angeliefert bekommt. Wenn seine Quelle die nicht-ASCII-Zeichen immer als NCRs liefert, wäre aber der Aufruf von utf8_decode() völlig sinnlos.
      Wenn im fertig aufbereiteten String aber ein Fragezeichen steht, ist das ein Zeichen dafür, dass eine Umwandlung von UTF-8 in eine andere Codierung Verlust produziert hat - mit anderen Worten: Der Originaltext etnhielt ein Zeichen, das in der gewünschten Ziel-Codierung nicht existiert, daher wird an der Stelle ein Fragezeichen eingesetzt. Es scheint also eher so, dass in seinem Quell-String nicht &x8222 auftaucht, sondern das damit umschriebene Zeichen im Klartext (was ja auch sinnvoll wäre).

      Am einfachsten wäre es du notierst das „-Zeichen ganz gewöhnlich im Text.

      ... und gibst das alles wieder als UTF-8 aus, so dass die verlustbehaftete Umwandlung nicht nötig ist.

      Ciao,
       Martin

      --
      F: Wer waren die ersten modernen Politiker?
      A: Die Heiligen drei Könige. Sie legten die Arbeit nieder, zogen teure Klamotten an und gingen auf Reisen.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  3. Meine Herren!

    $array[$zaehler] = utf8_decode($node2->nodeValue);

    PS: utf8_DEcode?

    Du hast die Daten also vorliegen, in der relativ unproblematischen, allseits beliebten UTF-8-Kodierung und wandelst sie in die wesentlich beschränktere Kodierung ISO_8859-1 um. In ISO_8859-1 gibt viele Zeichen nicht, bei der Konvertierungen werden fehlende Zeichen durch ein Fragezeichen ersetzt.

    Kann es sein, dass du sehr verzweifelt geraten hast, um ans Ziel zu kommen?

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Meine Herren!

      $array[$zaehler] = utf8_decode($node2->nodeValue);

      PS: utf8_DEcode?

      Du hast die Daten also vorliegen, in der relativ unproblematischen, allseits beliebten UTF-8-Kodierung und wandelst sie in die wesentlich beschränktere Kodierung ISO_8859-1 um. In ISO_8859-1 gibt viele Zeichen nicht, bei der Konvertierungen werden fehlende Zeichen durch ein Fragezeichen ersetzt.

      Kann es sein, dass du sehr verzweifelt geraten hast, um ans Ziel zu kommen?

      Naja, wenn ich das nicht mache, kommt z. B. DAS heraus:
      Der ehemalige Präsident von Bayern München,.

      1. Hi,

        PS: utf8_DEcode?
        Naja, wenn ich das nicht mache, kommt z. B. DAS heraus:
        Der ehemalige Präsident von Bayern München,.

        schon fast gut - jetzt musst du dein UTF-8 nur noch richtig kennzeichnen, also die passende Angabe im Content-Type-Header senden:

        Content-Type: text/html; charset=utf-8

        Dann bist du vermutlich einen großen Schritt weiter.

        Ciao,
         Martin

        --
        why the heck do you jerk think, that wir ein doppelposting nicht bemerken, wenn you zwischendurch the sprache wechselst?
          (wahsaga)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hi,

          PS: utf8_DEcode?
          Naja, wenn ich das nicht mache, kommt z. B. DAS heraus:
          Der ehemalige Präsident von Bayern München,.

          schon fast gut - jetzt musst du dein UTF-8 nur noch richtig kennzeichnen, also die passende Angabe im Content-Type-Header senden:

          Content-Type: text/html; charset=utf-8

          Dann bist du vermutlich einen großen Schritt weiter.

          Ciao,
          Martin

          So steht es am Anfang meines Codes:

          <?php  
          ini_set("user_agent", "Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].")");  
          header("Content-Type: text/html; charset=UTF-8");  
          $feedfu = "ff2c.php";           // Seite mit den Funktionen  
            
          ?>
          
      2. Meine Herren!

        Der ehemalige Präsident von Bayern München,.

        Das ist ein neues Beispiel, mit anderem Verhalten:

        Das ist das Ergebnis, wenn man utf8_encode auf die bereits in utf8-Kodierung vorliegenden Zeichenkette "Der ehemalige Präsident von Bayern München,." anwendet. Also die Eingabekodierung falscherweise als ISO_8859-1 aufgefasst wurde und darauf basierend eine Konvertierung zu utf8 vorgenommen wurde.

        An irgendeiner Stelle wurde da ziemlich gemurkst. Stammen die beiden Beispieltexte aus verschiedenen Quellen? Dann solltest du dir ansehen, in welcher Kodierung die Quellen wirklich vorliegen und dann respektive Konvertieren und nicht immer einfach auf gut Glück ein utf8_encode in Code hauen. Dafür ist dann mb_convert_encoding() evtl. besser geeignet. Auf jedenfall muss mal Klarheit darüber gewonnen werden, von was nach was hier konvertiert werden soll.

        --
        “All right, then, I'll go to hell.” – Huck Finn
        1. Meine Herren!

          Der ehemalige Präsident von Bayern München,.

          Das ist ein neues Beispiel, mit anderem Verhalten:

          Das ist das Ergebnis, wenn man utf8_encode auf die bereits in utf8-Kodierung vorliegenden Zeichenkette "Der ehemalige Präsident von Bayern München,." anwendet. Also die Eingabekodierung falscherweise als ISO_8859-1 aufgefasst wurde und darauf basierend eine Konvertierung zu utf8 vorgenommen wurde.

          An irgendeiner Stelle wurde da ziemlich gemurkst. Stammen die beiden Beispieltexte aus verschiedenen Quellen? Dann solltest du dir ansehen, in welcher Kodierung die Quellen wirklich vorliegen und dann respektive Konvertieren und nicht immer einfach auf gut Glück ein utf8_encode in Code hauen. Dafür ist dann mb_convert_encoding() evtl. besser geeignet. Auf jedenfall muss mal Klarheit darüber gewonnen werden, von was nach was hier konvertiert werden soll.

          Also deklariert ist es als utf_8.

          http://www.sr-online.de/sronline/nachrichten/regionalnachrichten/index.html

          Und das obige kommt heraus, wenn ich den String nicht einem "utf8_decode" unterziehe.

          1. Meine Herren!

            Also deklariert ist es als utf_8.

            Und die

            http://www.sr-online.de/sronline/nachrichten/regionalnachrichten/index.html

            Und das obige kommt heraus, wenn ich den String nicht einem "utf8_decode" unterziehe.

            Du wiederholst dich, und eine mögliche Ursache für dieses Verhalten habe ich dir bereits genannt, und ich werde mich diesbezüglich nicht wiederholen, außer du kannst mir sagen, was du daran nicht verstanden hast. Auf der Seite, die du jetzt geliefert hast, kann ich weder diesen Text noch den Text aus dem ersten Beispiel finden. Ebenso wenig kann ich einen dieser Texte auf deiner eigenen Seite entdecken. Ich weiß nicht, wie ich dir jetzt noch weiterhelfen soll.

            Hast du verstanden, dass die beiden Beispiel Texte in verschiedenen Kodierungen vorliegen? Der erste vermutlich in korrektem UTF8, der zweite vermutlich in zweifach kodiertem UTF8 (also einmal zu viel). Du kannst auf den zweiten Text utf8_decode aufrufen, um die Zweifach-Kodierung zu reparieren und als Ergebnis eine korrekt kodierte UTF8-Zeichenkette zu erhalten. Rufst du utf8_decode auch auf dem ersten Text auf, erhälst du eine verstümmelte Version in ISO_8859-1-Kodierung.

            --
            “All right, then, I'll go to hell.” – Huck Finn
            1. Meine Herren!

              Also deklariert ist es als utf_8.

              Und die

              http://www.sr-online.de/sronline/nachrichten/regionalnachrichten/index.html

              Und das obige kommt heraus, wenn ich den String nicht einem "utf8_decode" unterziehe.

              Du wiederholst dich, und eine mögliche Ursache für dieses Verhalten habe ich dir bereits genannt, und ich werde mich diesbezüglich nicht wiederholen, außer du kannst mir sagen, was du daran nicht verstanden hast. Auf der Seite, die du jetzt geliefert hast, kann ich weder diesen Text noch den Text aus dem ersten Beispiel finden. Ebenso wenig kann ich einen dieser Texte auf deiner eigenen Seite entdecken. Ich weiß nicht, wie ich dir jetzt noch weiterhelfen soll.

              Die Seite war nur ein Beispiel, der Inhalt ändert sich ja über die Stunden...Hier ist jetzt noch der oben zitierte Text mit den Fragezeichen.
              http://www.sr-online.de/sronline/nachrichten/regionalnachrichten/regionalnachrichten_aktuell100~_seite-9.html
              Was ich nicht verstehe ist, wieso eine Seite, die in utf8 deklariert ist, Nicht-Utf_8 enthält und was man dann als "Auslesender" am geschicktesten macht, um gegen solche Zeichen "Ausreißer" gefeit zu sein.

              1. Meine Herren!

                Die Seite war nur ein Beispiel, der Inhalt ändert sich ja über die Stunden...Hier ist jetzt noch der oben zitierte Text mit den Fragezeichen.

                Du wechselst ständig zwischen den beiden Beispielen, zum aller letzen mal: Die Beispiele zeigen unterschiedliche Verhalten, die unterschiedlich behandelt werden müssen.

                http://www.sr-online.de/sronline/nachrichten/regionalnachrichten/regionalnachrichten_aktuell100~_seite-9.html

                Plötzlich sind wir wieder beim ersten Beispiel, aber immerhin den Text gibt es auf der Seite.

                Was ich nicht verstehe ist, wieso eine Seite, die in utf8 deklariert ist, Nicht-Utf_8 enthält

                Diese Seite »IST« utf8-kodiert. Sie enthält einige Zeichen-Referenzen, die man sich hätte sparen können. Obendrauf fehlt das abschließende Semikolon für die Zeichenreferenz &#8222. Die meisten HTML5-Parser sind so tolerant und verzeihen diesen Fehler.

                und was man dann als "Auslesender" am geschicktesten macht, um gegen solche Zeichen "Ausreißer" gefeit zu sein.

                Es gibt das Problem mit der fehlerhaften Zeichen-Referenz. Dagegen kannst du höchstens einen genauso toleranten HTML5-Parser einsetzen, wie die der aktuellen Browser. Ob es den für PHP gibt, weiß ich nicht. Aber ich denke dieser Fehler fällt nicht all zu schwer ins Gewicht. Es ist ein Fehler von SR-online, nicht von dir, der sich hoffentlich nicht sehr häufig wiederholen wird. Ich würde ihn ignorieren.

                Einen ANDERER, viel schwerwiegenderer Fehler ist, dass du immer noch zu glauben scheinst,  die Quelle sei NICHT UTF8-kodierst, »IST« sie aber. Das »IST« UTF8. Die Seite wird korrekt UTF8-kodiert ausgeliefert. Ich hoffe das war deutlich. DU machst ein utf8_DEcode. »DE«code. Und lieferst es dann wieder MIT UTF8 aus. Der Fehler liegt bei dir.

                In dem zweite Beispiel ist das utf8_decode von dir richtig angewandt, weil die Eingaben-Daten dort offensichtlich falsch sind.

                PS: Bitte fühle dich nicht angeschrien, die Großschreibung soll nur die wichtigen Punkte hervorheben, weil du da bis jetzt offensichtlich zu schluderich drüber gelesen hast.

                --
                “All right, then, I'll go to hell.” – Huck Finn
                1. Du wechselst ständig zwischen den beiden Beispielen, zum aller letzen mal: Die Beispiele zeigen unterschiedliche Verhalten, die unterschiedlich behandelt werden müssen.

                  http://www.sr-online.de/sronline/nachrichten/regionalnachrichten/regionalnachrichten_aktuell100~_seite-9.html

                  Es gibt das Problem mit der fehlerhaften Zeichen-Referenz. Dagegen kannst du höchstens einen genauso toleranten HTML5-Parser einsetzen, wie die der aktuellen Browser. Ob es den für PHP gibt, weiß ich nicht. Aber ich denke dieser Fehler fällt nicht all zu schwer ins Gewicht. Es ist ein Fehler von SR-online, nicht von dir, der sich hoffentlich nicht sehr häufig wiederholen wird. Ich würde ihn ignorieren.

                  Ja, danke für die Geduld. Das mit den unterschiedlichen Stellen sollte kein Verwirrspiel sein (leider stehen ja Nachrichtentexte nicht sehr lange auf der Seite), sondern sollte zeigen, was passiert wenn ich nicht alles, was diese Seiten (SR-Online) so hergeben durch ein utf8_decode schicke. Klar, war das herumprobiert, aber anders wusste ich mir eben nicht zu helfen. Das tritt auch z. B. bei zdf-Heute öfters auf, meist wenn sie Anführungsstriche unten verwenden, dass das dann als Fragezeichen erscheint.

                  Gruß und Dank

                  1. Hello,

                    Ja, danke für die Geduld. Das mit den unterschiedlichen Stellen sollte kein Verwirrspiel sein (leider stehen ja Nachrichtentexte nicht sehr lange auf der Seite), sondern sollte zeigen, was passiert wenn ich nicht alles, was diese Seiten (SR-Online) so hergeben durch ein utf8_decode schicke. Klar, war das herumprobiert, aber anders wusste ich mir eben nicht zu helfen. Das tritt auch z. B. bei zdf-Heute öfters auf, meist wenn sie Anführungsstriche unten verwenden, dass das dann als Fragezeichen erscheint.

                    Es gibt allerdings auch Funktionen, mit denen man abschätzen kann, ob es sich um eine UTF-8-Codierung handelt.

                      
                      
                    function seems_utf8($str)  
                    {  
                        $length = strlen($str);  
                      
                        for ($i=0; $i < $length; $i++)  
                        {  
                    	$c = ord($str[$i]);  
                      
                    	if ($c < 0x80) $n = 0; # 0bbbbbbb  
                    	elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb  
                    	elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb  
                    	elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb  
                    	elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb  
                    	elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b  
                    	else return false; # Does not match any model  
                      
                    	for ($j=0; $j<$n; $j++)  
                            {  
                                # n bytes matching 10bbbbbb follow ?  
                    	    if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) return false;  
                    	}  
                        }  
                        return true;  
                    }  
                      
                    
                    

                    Liebe Grüße aus dem schönen Oberharz

                    Tom vom Berg

                    --
                     ☻_
                    /▌
                    / \ Nur selber lernen macht schlau
                    Die ultimative Seite für Selbermacher
                    1. Hello,

                      Es gibt allerdings auch Funktionen, mit denen man abschätzen kann, ob es sich um eine UTF-8-Codierung handelt.

                      function seems_utf8($str)
                      {
                          $length = strlen($str);

                      for ($i=0; $i < $length; $i++)
                          {
                      $c = ord($str[$i]);

                      if ($c < 0x80) $n = 0; # 0bbbbbbb
                      elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb
                      elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb
                      elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb
                      elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb
                      elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b
                      else return false; # Does not match any model

                      for ($j=0; $j<$n; $j++)
                              {
                                  # n bytes matching 10bbbbbb follow ?
                          if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) return false;
                      }
                          }
                          return true;
                      }

                        
                      Sorry, ich vergaß zu erwähnen, dass es auch noch  
                        
                          mb\_check\_encoding($str, 'UTF-8');  
                        
                      gibt, wenn die mb\_\*-Funktionen zur Verfügung stehen.  
                        
                        
                        
                        
                        
                        
                      Liebe Grüße aus dem schönen Oberharz  
                        
                        
                      Tom vom Berg  
                      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                        
                      
                      -- 
                       ☻\_  
                      /▌  
                      / \ Nur selber lernen macht schlau  
                      [Die ultimative Seite für Selbermacher](http://getscript.de/)
                      
                      1. Hello,

                        Es gibt allerdings auch Funktionen, mit denen man abschätzen kann, ob es sich um eine UTF-8-Codierung handelt.

                        function seems_utf8($str)
                        {
                            $length = strlen($str);

                        for ($i=0; $i < $length; $i++)
                            {
                        $c = ord($str[$i]);

                        if ($c < 0x80) $n = 0; # 0bbbbbbb  
                        elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb  
                        elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb  
                        elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb  
                        elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb  
                        elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b  
                        else return false; # Does not match any model  
                        
                        for ($j=0; $j<$n; $j++)  
                        

                        {
                                    # n bytes matching 10bbbbbb follow ?
                            if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) return false;
                        }
                            }
                            return true;
                        }

                        
                        >   
                        > Sorry, ich vergaß zu erwähnen, dass es auch noch  
                        >   
                        >     mb\_check\_encoding($str, 'UTF-8');  
                        >   
                        > gibt, wenn die mb\_\*-Funktionen zur Verfügung stehen.  
                        >   
                        >   
                        >   
                        > Danke, werde es ausprobieren. Habe übrigens versucht dem Link mit dem vielversprechenden Titel zu folgen, aber getscript.de ist nicht erreichbar...  
                          
                        Gruß und Dank  
                        pto
                        
                        1. Hello,

                          Danke, werde es ausprobieren. Habe übrigens versucht dem Link mit dem vielversprechenden Titel zu folgen, aber getscript.de ist nicht erreichbar...

                          Dann hast Du also keinen lokalen Webserver laufen?

                          War eigentlich ein Fehler bei der Konfiguration, aber nun lasse ich erst einmal so, bis sich ein paar Scripts angesammelt haben.

                          Liebe Grüße aus dem schönen Oberharz

                          Tom vom Berg

                          --
                           ☻_
                          /▌
                          / \ Nur selber lernen macht schlau
                          Die ultimative Seite für Selbermacher
                      2. Meine Herren!

                        Sorry, ich vergaß zu erwähnen, dass es auch noch

                        mb_check_encoding($str, 'UTF-8');

                        Beide Funktionen sind für den vorliegenden Fall kein Lösungsansatz.

                        Ich versuche mich nochmal ganz langsam zu erklären:

                        utf8_encode() hat einen schlechten Namen, die Funktion sollte eigentlich convert_from_ISO_8859_1_to_UTF8 oder so heißen. Denn das ist genau was utf8_encode() macht: Sie konvertiert von ISO_8859-1 nacht UTF8. Ob die Eingabe dabei wirklich ISO_8859-1 ist oder nicht, kümmert die Funktion nicht, die ist im Automodus, macht einfach das, was sie tun soll. Man kann sie sich wie einen dummen Roboter vorstellen, der Briefe frankieren soll, der Roboter prüft aber nicht, ob schon eine Briefmarke auf dem Umschlag klebt, er klebt einfach immer wieder eine neue drauf. Im Falle von utf8_encode() kann dadurch aber der Text verstümmelt werden, wenn die Eingabe schon UTF8 ist (schon eine Marke auf dem Brief klebt) und trotzdem wieder konvertiert wird (noch eine Marke auf den Umschlag kommt). Das macht zwei Marken auf dem Umschlag.

                        Hier eine kleine Illustration.

                        echo 'ä';  
                        echo utf8_encode( 'ä' );  
                        echo utf8_encode( utf8_encode( 'ä' ) );  
                        echo utf8_encode( utf8_encode( utf8_encode( 'ä' ) ) );
                        

                        (Ich konnte das Beispiel leider nicht mit der erzeugeten Ausgabe hier im Forum posten, deswegen seid ihr genötigt, den Code selbst zu testen, zum Beispiel mit dem http://phpcodepad.com/)

                        Die Ausgabe wird jedenfalls immer länger und unleserlicher, aber trotzdem ist die Ausgabe immer eine korrekt kodierte UTF8-Zeichenkette. Und die Funktionen mb_check_encoding() und seems_utf8() werden sie immer als korrekte UTF8-Zeichenkette auffassen.

                        mb_check_encoding( utf8_encode( 'ä' ), 'UTF-8'); // true  
                        mb_check_encoding( utf8_encode( utf8_encode( 'ä' ) ), 'UTF-8'); // true
                        

                        mb_check_encoding() und seems_utf8() arbeiten korrekt, aber für dieses Problem hilft uns das leider nicht weiter.

                        Eine robuste Methode, um eine solche Mehrfach-Kodierung zu erkennen, ist mir nicht bekannt.

                        --
                        “All right, then, I'll go to hell.” – Huck Finn
                        1. Hello,

                          Die Ausgabe wird jedenfalls immer länger und unleserlicher, aber trotzdem ist die Ausgabe immer eine korrekt kodierte UTF8-Zeichenkette. Und die Funktionen mb_check_encoding() und seems_utf8() werden sie immer als korrekte UTF8-Zeichenkette auffassen.

                          mb_check_encoding( utf8_encode( 'ä' ), 'UTF-8'); // true

                          mb_check_encoding( utf8_encode( utf8_encode( 'ä' ) ), 'UTF-8'); // true

                          
                          >   
                          > `mb_check_encoding()`{:.language-php} und `seems_utf8()`{:.language-php} arbeiten korrekt, aber für dieses Problem hilft uns das leider nicht weiter.  
                          >   
                          > Eine robuste Methode, um eine solche Mehrfach-Kodierung zu erkennen, ist mir nicht bekannt.  
                            
                          Man muss ja auch mit den Funktionen VORHER prüfen, ob vermeintlich schon utf-8 vorliegt und nur dann nach utf-8 umcodieren, wenn dies NICHT der Fall war.  
                            
                          Aber deine Anmerkung sollte dringend im PHP-Manual bei mb\_check\_encoding() vermerkt werden.  
                            
                            
                            
                            
                          Liebe Grüße aus dem schönen Oberharz  
                            
                            
                          Tom vom Berg  
                          ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                            
                          
                          -- 
                           ☻\_  
                          /▌  
                          / \ Nur selber lernen macht schlau  
                          [Die ultimative Seite für Selbermacher](http://getscript.de/)
                          
                        2. Om nah hoo pez nyeetz, 1UnitedPower!

                          echo 'ä';

                          echo utf8_encode( 'ä' );
                          echo utf8_encode( utf8_encode( 'ä' ) );
                          echo utf8_encode( utf8_encode( utf8_encode( 'ä' ) ) );

                          
                          > (Ich konnte das Beispiel leider nicht mit der erzeugeten Ausgabe hier im Forum posten, deswegen seid ihr genötigt, den Code selbst zu testen, zum Beispiel mit dem <http://phpcodepad.com/>)  
                            
                          

                          ä
                          ä
                          ä
                          ÃÂä

                          Man muss etwas Geduld haben und die Steuerzeichen (0083) nicht mitkopieren. Siehe <http://rishida.net/uniview/>  
                            
                          Matthias
                          
                          -- 
                          Der Unterschied zwischen Java und JavaScript ist größer als der zwischen [Koma und Komantsche](http://selfhtml.apsel-mv.de/java-javascript/index.php?buchstabe=K#koma).  
                          ![](http://www.billiger-im-urlaub.de/kreis_sw.gif)  
                          
                          
                  2. Ja, danke für die Geduld. Das mit den unterschiedlichen Stellen sollte kein Verwirrspiel sein (leider stehen ja Nachrichtentexte nicht sehr lange auf der Seite), sondern sollte zeigen, was passiert wenn ich nicht alles, was diese Seiten (SR-Online) so hergeben durch ein utf8_decode schicke. Klar, war das herumprobiert, aber anders wusste ich mir eben nicht zu helfen. Das tritt auch z. B. bei zdf-Heute öfters auf, meist wenn sie Anführungsstriche unten verwenden, dass das dann als Fragezeichen erscheint.

                    Gruß und Dank

                    Also momentan beispielsweise hat SR-Online gerade wieder so etwas mit "Die Welt":
                    Wie die Zeitung &#8222Welt&ldquo;&ensp;berichtet, registrierte die Polizei im vergangenen Jahr knapp 64. 500 Fälle

                    SR_Online

                    1. Hello,

                      Also momentan beispielsweise hat SR-Online gerade wieder so etwas mit "Die Welt":
                      Wie die Zeitung &#8222Welt&ldquo;&ensp;berichtet, registrierte die Polizei im vergangenen Jahr knapp 64. 500 Fälle

                      SR_Online

                      Dann schreib ihnen das doch mal. Die werden einen Fehler in ihrer API vom CMS haben und der ist dann reproduzierbar. Schließlich tippen die da ja kein HTML ein.

                      Liebe Grüße aus dem schönen Oberharz

                      Tom vom Berg

                      --
                       ☻_
                      /▌
                      / \ Nur selber lernen macht schlau
                      Die ultimative Seite für Selbermacher