Sonderzeichen / UTF-8-Problematik bei Import von Wikipedia

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

  • Sonderzeichen / UTF-8-Problematik bei Import von Wikipedia

    Hallo,

    ich lasse mir aus einigen Einträgen automatisiert einen Index erstellen, und lese - wo vorhanden - dafür einige Teile von Wikipedia ein.

    Das einlesen sieht so aus:
    Code:
    $URL = "http://de.wikipedia.org/wiki/" . $urlend;
    $URL = utf8_encode($URL);
    $seiteninhalt = file_get_contents($URL);
    Sowohl die PHP-Datei, die das macht, als auch die erzeugte HTML-Datei enthalten den Eintrag charset=UTF-8.

    Trotzdem erhalte ich sehr unschöne Effekte mit allen Sonderzeichen, ein Beispiel:
    Die <b>Demografie</b> (auch <b>Demographie</b>, griech. <b>δημογραφία</b>, von <i>δήμος, démos â€" Volk</i> und <i>γραφή, grafé â€" Schrift, Beschreibung</i>) bzw. <b>Bevölkerungswissenschaft</b>
    Was mache ich da noch falsch? Danke!

  • #2
    Hallo,

    dann codierst du es vermutlich doppelt als UTF-8.

    Genaueres kann man nicht sagen. Bei deinen Angaben, wo du überall UTF-8 angibst, hättest du etwas mehr ins Detail gehen oder ein Onlinebeispiel liefern können.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hmm, ich versuche mal, mehr Details zu geben:

      Code:
                  $URL = "http://de.wikipedia.org/wiki/" . $urlend;
                  $URL = utf8_encode($URL);
      
                  $seiteninhalt = file_get_contents($URL);
                  // Anfang weg bis hier
                  $pos = strpos($seiteninhalt, '<h1 id="firstHeading" class="firstHeading">');
                  if ($pos > 0) {
                     $seiteninhalt = substr($seiteninhalt, $pos);
                  }
      Dann kommt noch div. anderes. Es bleibt ein String übrig, mit möglichst wenigen HTML-Kommandos. Und den füge ich dann an passender Stelle ein und schreibe die neue HTML-Datei:

      Code:
      if (strlen($URLcontent) > 0) {
               $pos1 = strpos($all, "-- INHALTSBESCHREIBUNG --");
               $pos2 = strpos($all, "-- INHALTSBESCHREIBUNG_ENDE --");
               if ($pos1 !== false and $pos2 !== false) {
                  $all = substr($all, 0, $pos1 - 2) . $URLcontent . substr($all, $pos2 + 31);
               } 
      
            $filename = $keyword . ".html";
            $handle   = fopen ($themeindexpath . $filename, "w");
            if (! fwrite($handle, $all) ) {
               die(utf8_encode("Fehler: Neue Begriffsdatei $filename konnte nicht geschrieben werden!"));
            }
            fclose ($handle);
      Hilft das?

      Kommentar


      • #4
        Naja, fast schon ein bisschen. Ich sehe jetzt, dass du den HTML-Code abspeicherst und nciht direkt ausgibst, aber mehr eigentlich nicht.

        Kannst du mal so eine gespeicherte HTML-Datei als Anhang hochladen?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Gerne:

          Kommentar


          • #6
            Zitat von beginner123 Beitrag anzeigen
            Gerne:
            Aha
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Sorry, ich hatte nicht gesehen, dass man html-files nicht anhängen kann. Jetzt sollt´s als zip dabei sein.
              Angehängte Dateien

              Kommentar


              • #8
                Alles klar, du baust da irgendwas zusammen aber kein HTML.

                Erste Zeile:

                Code:
                <html header('Content-Type: text/html; charset=utf-8')><head>
                Das kann so nicht gehen. header ist eine PHP-Funktion, kein HTML-Attribut.

                Die Lösung: HTML korrigieren und das im head einfügen:
                HTML-Code:
                <meta http-equiv="content-type" content="text/html; charset=utf-8" />
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Super, danke, nach vielen Stunden Programmieren macht man manchmal die dümmsten Fehler...

                  Kommentar


                  • #10
                    Jag aber trotzdem mal den HTML-Code durch den W3C Validator. Da ist noch mehr im Argen.
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Mache ich sowieso noch. Aber vorher noch: Kannst du mir erklären, warum z.B. der lange Gedankenstrich nach wie vor nicht passt? Gleich oben bei den griechischen Zeichen, siehe Themenindex fr Schlsselwort Demographie von www.dvd-wissen.com

                      Kommentar


                      • #12
                        Erklären nicht, aber vermuten: du arbeitest mit den normalen Stringfunktionen und machst/suchst/ersetzt damit irgendwas, ich nehme an genau in dem weggelassenen Teil von dem geposteten Script. Dabei zerstörst du dir deine UTF-8-Sequenzen.

                        Sieh dir mal die MBString-Erweiterung von PHP an.
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          Déjà-vu!

                          Kommentar

                          Lädt...
                          X