Wieder mal char-Probleme

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

  • #31
    Zitat von newbie1955 Beitrag anzeigen
    Danke für die Hilfe, aber bei mir kommen die Umlaut-Begriffe trotzdem.
    Prost, habe schon lange kein Bier mehr getrunken, wird vielleicht mal wieder Zeit. Kann jetzt Dein Problem schlecht nachvollziehen, weil es bei mir funktioniert. Was Du noch machen könntest, mal die gesuchten Begriffe und die Titel in einer Datei abspeichern, ob da Unterschiede erkennbar werden. Ergänze dazu den Code mal durch die mit *** kommentierten Zeilen.

    PHP-Code:
    <?php header("Content-Type: text/html; charset=UTF-8"); ?>
    <!DOCTYPE html>
    <html>

    <head>
    <title>Test</title>
    </head>

    <body>
    <div>
    <ul>
    <?php error_reporting(E_ERROR|E_PARSE);  // hochgesetzt wegen Entity-Warnungen

    $data file_get_contents("http://www.mz-web.de/mitteldeutschland/20641266,20641266.html");

    $doc = new DOMDocument();
    $doc->loadHTML("<?xml encoding=\"UTF-8\">".$data);

    $xPath   = new DOMXPath($doc);
    $zaehler 0;

    $epap   "E-Paper";
    $abge   "Abgeordnete befragen";
    $glueck "Glückwünsche";
    $trau   "Traueranzeigen";
    $herz   "Herzenswünsche";
    $speicher "Titel:\n";      /*** *** füge $speicher = "Titel:\n"; hinzu *** ***/

    foreach ($xPath->query("//h2/a") as $element) {

        
    $title $element->nodeValue
        
        
    $pos  mb_strpos($title$epap,   0"utf-8");
        
    $pos1 mb_strpos($title$abge,   0"utf-8");
        
    $pos2 mb_strpos($title$glueck0"utf-8");
        
    $pos3 mb_strpos($title$trau,   0"utf-8");
        
    $pos4 mb_strpos($title$herz,   0"utf-8");

        
    $href $element->getAttribute('href');
        
    $hreft "http://www.mz-web.de" $href;
        
    $search "„";


        if ((
    $zaehler <= 13) && ($pos === false) && ($pos1 === false) && ($pos2 === false) && ($pos3 === false) && ($pos4 === false)) {

            echo 
    "<li><a href=\"".htmlspecialchars($hreftENT_QUOTES"UTF-8"false)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES"UTF-8"false)."</a></li>\n";

            
    $zaehler++;
            
    $speicher .= htmlspecialchars($titleENT_QUOTES)."\n";      /*** *** füge $speicher .= $title."\n"; hinzu *** ***/
        
    }    
    }

    /*** *** füge beide Zeilen hinzu *** ***/

    $pruefe $epap."\n".$abge."\n".$glueck."\n".$trau."\n".$herz."\n\n".$speicher;

    file_put_contents("kontrolle.txt"$pruefe);


    /* kontrolle.txt:

    E-Paper
    Abgeordnete befragen
    Glückwünsche
    Traueranzeigen
    Herzenswünsche

    Titel:
    Spaziergänger finden Frauenleiche
    Zusätzliche Milliarden für Instandhaltung notwendig
    Ein Krokodil als Dankeschön
    Empörung nach Rauswurf
    Männer bedrohen Imbissbesitzer in Bad Kösen
    Betrug kann böse Folgen haben
    DGB setzt weiter auf Dialog
    Abenteurer suchen Gold in Thüringen
    Sechs Schwerverletzte bei Unfall auf A4
    Elke du Bois Spitzenkandidatin der Freien Wähler
    Ausbildungsplätze
    Reisemarkt
    */
    ?>
    </ul>
    </div>
    </body>
    </html>
    Und dann:

    Zitat von newbie1955 Beitrag anzeigen
    PHP-Code:
    htmlspecialchars($titleENT_QUOTES'UTF-8'false)."</a></li>\n"
    Zitat von newbie1955 Beitrag anzeigen
    PHP-Code:
    htmlspecialchars($titleENT_QUOTESfalse)."</a></li>\n"
    Noch einen Schnitzer, den ich mit kopiert hatte und der mir erst jetzt auffiel. Der hat jetzt nichts mit Deinem Problem zu tun, nur so allgemein. Du brauchst nicht alle Parameter verwenden, doch wenn, so würde ich die Reihenfolge einhalten und true oder false als boolescher Wert kommt erst an vierter Stelle. Die Werte sollten durch Komma getrennt werden.

    PHP-Code:
    htmlspecialchars($titleENT_QUOTES"UTF-8"false)."</a></li>\n"
    Zuletzt geändert von Melewo; 22.04.2013, 12:44.

    Kommentar


    • #32
      Hallo

      Danke für den Versuch, habe Deinen Code komplett umgesetzt. Hier ist das, was in meiner Textdatei landet. Es scheint ja eindeutig ein encoding-Problem zu sein, aber welches? Wenn er "Glückwünsche" sucht, aber "Glückwünsche" findet, ist es ja kein Wunder, wenn die Suchbegriffe nicht ausgeschlossen werden:

      Code:
      E-Paper
      Abgeordnete befragen
      Glückwünsche
      Traueranzeigen
      Herzenswünsche
      
      Titel:
      Möllring kommt, Wolff geht
      Waldbrandgefahr durch fehlende Niederschläge
      Alles eine Frage des Führungsstils
      Spaziergänger finden Frauenleiche
      Zusätzliche Milliarden für Instandhaltung notwendig
      Ein Krokodil als Dankeschön
      Empörung nach Rauswurf
      Männer bedrohen Imbissbesitzer in Bad Kösen
      Betrug kann böse Folgen haben
      DGB setzt weiter auf Dialog
      Glückwünsche
      Herzenswünsche
      Ausbildungsplätze
      Reisemarkt
      Auf der Seite ausgegeben wird:

      Gruß
      newbie1955

      Kommentar


      • #33
        Das Problem ist, dass die Daten UTF-8 kodiert sind, aber deine PHP-Datei nicht. Also eh und je das selbe Problem. Es liegt einfach an der Kodierung der PHP-Datei. Das Problem hat nichts mit PHP selber zu tun, sondern liegt auf der Dateiebene. Somit ist es eigentlich sinnlos hier weiter PHP-Code zu diskutieren, da hier nicht der Fehler zu suchen ist.

        Kommentar


        • #34
          Mein Test war unter Localhost, auf einem Server erhalte ich auch so ein Ergebnis, jedoch einheitlich verunstaltet. Du könntest jetzt versuchen, ob die Titel mit utf8_decode() richtig gespeichert werden, so dass es einheitlich ist und falls ja, utf8_decode() nur für mb_strpos zur Suche verwenden.

          PHP-Code:
          $pruefe $epap."\n".$abge."\n".$glueck."\n".$trau."\n".$herz."\n\n".utf8_decode($speicher); 
          Wäre zwar nur ein Notbehelf, nur vielmehr fällt mir da nicht ein. Das wird sich schon so verhalten, wie h3ll schrieb.

          Kommentar


          • #35
            Hallo

            Ja, das glaube ich durchaus. h3ll. Nur weiß ich nicht, was ich noch tun kann, wenn ich den Code in Notepad++ mit utf-8 ohne BOM abspeichert und Binär mit Filezilla übertragen habe (wie von Dir vorgeschlagen) - und es trotzdem nicht funktioniert.

            Habt Ihr übrigens noch mal einen Tipp (Link zm Manual), wie ich diese ganzen einzelnen $pos-Abfragen mithilfe eines Arrays vereinfache (Blacklist)?

            Danke, Melewo, das mit utf8-decode ist im Moment bereits meine Notlösung, funktioniert auch, aber ich hätte das natürlich gerne grundsätzlich geklärt und verstanden...

            Gruß
            newbie1955
            Zuletzt geändert von newbie1955; 22.04.2013, 14:59.

            Kommentar


            • #36
              Zitat von newbie1955 Beitrag anzeigen
              Ja, das glaube ich durchaus. h3ll. Nur weiß ich nicht, was ich noch tun kann, wenn ich den Code in Notepad++ mit utf-8 ohne BOM abspeichert und Binär mit Filezilla übertragen habe (wie von Dir vorgeschlagen) - und es trotzdem nicht funktioniert.
              Vielleicht funkt irgendwas beim Hoster dazwischen. Vielleicht der FTP-Server. Keine Ahnung.

              Das Problem kannst du umgehen, indem du PHP-Dateien in ASCII-Codierung abspeichert und Sonderzeichen nur binär angibts. zB.

              PHP-Code:
              $name "Franz M\xC3\xBCller"// Franz Müller als UTF-8 Kodierung 
              Das ist quasi der gemeinsame Nenner, der immer funktioniert. ASCII versteht jedes System.

              Eine Übersicht der UTF-8 Zeichen findest du hier: Unicode/UTF-8-Zeichentabelle

              Kommentar


              • #37
                strpos - array?

                Danke für den Tipp.

                Und das Vereinfachen der Serienabfrage von auszuschließenden Begriffen, geht das auch per array? Beim googlen habe ich nur Fragende gefunden, aber keine funktionierenden Antworten. Nur ein Link oder Tipp wäre schön, danke!

                Gruß
                newbie1955

                Kommentar


                • #38
                  Zitat von newbie1955 Beitrag anzeigen
                  Nur ein Link oder Tipp wäre schön, danke!
                  Wenn Du jetzt ein ganz klein wenig mehr Erfahrung hättest, dann hätte ich vorgeschlagen, schaue doch einfach mal, was die bei Stack Overflow so an Ansätzen zu bieten haben, ob Du daraus etwas entwickeln könntest und versuche es dann mit mb_strpos umzusetzen.

                  php - Using an array as needles in strpos - Stack Overflow

                  Oder schaue mal nach strpos und stripos oder in_array, da findest Du auch so einige Dinge, die einen Ansatz enthalten könnten, den Du dann mit mb_strpos umsetzen könntest.

                  PHP: strpos - Manual

                  Kommentar


                  • #39
                    Habe mal am ersten Beispiel von Stack Overflow solange gebastelt, bis es gepasst hat und nur jetzt zum Test die unerwünschten Titel auf den Else-Zweig gelegt Wenn Du den Else-Zweig entfernst, dann wird "Keine Ausgabe bei *** *** ..." halt nicht mit ausgegeben.

                    Und wenn Du libxml_use_internal_errors auf true setzt, dann bist Du auch die Entitie-Warnungen los und kannst dennoch ganz normal mit error_reporting arbeiten, wie es ausschaut. Oder wie ist das zu verstehen?

                    PHP-Code:
                    <?php header("Content-Type: text/html; charset=UTF-8"); ?>
                    <!DOCTYPE html>
                    <html>

                    <head>
                    <title>Test</title>
                    </head>

                    <body>
                    <div>
                    <ul>
                    <?php
                    error_reporting
                    (E_ALL);
                    ini_set("display_errors"true);
                    libxml_use_internal_errors(true);

                    $data file_get_contents("http://www.mz-web.de/mitteldeutschland/20641266,20641266.html");

                    $doc = new DOMDocument();
                    $doc->loadHTML("<?xml encoding=\"UTF-8\">".$data);

                    $xPath   = new DOMXPath($doc);
                    $zaehler 0;

                    $letters = array(

                        
                    "E-Paper",
                        
                    "Abgeordnete befragen",
                        
                    "Glückwünsche",
                        
                    "Traueranzeigen",
                        
                    "Herzenswünsche"
                    );
                    $end count($letters);

                    function 
                    Titelei($titel$letter$end) {

                        for (
                    $i 0$i $end$i++) {

                            if (
                    mb_strpos($titel$letter[$i], 0"utf-8") !== false) {

                                return 
                    $titel false;
                            }
                        }
                        return 
                    $titel true;
                    }

                    foreach (
                    $xPath->query("//h2/a") as $element) {

                        
                    $title $element->nodeValue;

                        
                    $href $element->getAttribute('href');
                        
                    $hreft "http://www.mz-web.de" $href;
                        
                    $search "„";


                        if(
                    Titelei($title$letters$end) !== false) {

                            if (
                    $zaehler <= 13) {

                                echo 
                    "<li><a href=\"".htmlspecialchars($hreftENT_QUOTES"UTF-8"false)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES"UTF-8"false)."</a></li>\n";

                                
                    $zaehler++;
                            }
                        }
                        else {echo 
                    "<li>Keine Ausgabe bei *** *** ".htmlspecialchars($titleENT_QUOTES"UTF-8"false)."</li>\n";
                        }
                    }

                    /*
                        Wolff will Jobsuche in Ruhe angehen
                        Die Bahn baut auf Beton
                        Waldbrandgefahr durch fehlende Niederschläge
                        Möllring kommt, Wolff geht
                        Keine Ausgabe bei *** *** E-Paper
                        Alles eine Frage des Führungsstils
                        63-Jährige Leipzigerin zweifelsfrei identifiziert
                        Zusätzliche Milliarden für Instandhaltung notwendig
                        Ein Krokodil als Dankeschön
                        Empörung nach Rauswurf
                        Männer bedrohen Imbissbesitzer in Bad Kösen
                        Keine Ausgabe bei *** *** Abgeordnete befragen
                        Keine Ausgabe bei *** *** Glückwünsche
                        Keine Ausgabe bei *** *** Traueranzeigen
                        Keine Ausgabe bei *** *** Herzenswünsche
                        Ausbildungsplätze
                        Reisemarkt
                    */
                    ?>
                    Zuletzt geändert von Melewo; 23.04.2013, 00:29.

                    Kommentar


                    • #40
                      Danke, habe jetzt mal die utf_8-Notlösung (für die Umlautwörter) hinzugefügt, dann funktioniert es, außer, dass er in der *** ***-AUsgabe die Umlaut-Begriffe gar nicht erst ausgibt, was merkwürdig ist, für die Lösung aber egal.

                      Code:
                          Platzt das Milliarden-Projekt?
                          Private Bierbrauer sind selten in Sachsen-Anhalt
                          Er kommt - aber wird man ihn auch sehen?
                          Kind schwer verletzt ins Krankenhaus eingeliefert
                          Keine Ausgabe bei *** *** E-Paper
                          Hartmut Möllring sieht sich als verlässlichen Verhandlungspartner
                          Geschmack der Freiheit aus Bernburg
                          Wolff will Jobsuche in Ruhe angehen
                          Die Bahn baut auf Beton
                          Waldbrandgefahr durch fehlende Niederschläge
                          Möllring kommt, Wolff geht
                          Keine Ausgabe bei *** *** Abgeordnete befragen
                          Keine Ausgabe bei *** ***
                          Keine Ausgabe bei *** *** Traueranzeigen
                          Keine Ausgabe bei *** ***
                          Keine Ausgabe bei *** ***
                          Keine Ausgabe bei *** *** Reisemarkt
                      Ich hatte dann nach vielem Suchen auch noch dies hier gefunden, was ich nochmal probieren werde:

                      Code:
                      $keyword = array('SPOT','ASTRO','FNT','MP3','RM','HOW','VIDEO');
                      $message = strtoupper("hello, how are you?");
                      $output = "Keywords found: ";
                      foreach ($keyword as $k) {
                        if(strpos($message, $k)> -1){$output .= $k . ', ';}
                      }
                      echo rtrim($output, ", ");
                      AUf jeden Fall Danke für die Hilfe! Hoffe, dass ich das utf8-Rätsel dann auch noch mal lösen werde.

                      Gruß
                      newbie

                      Kommentar


                      • #41
                        Zitat von newbie1955 Beitrag anzeigen
                        Danke, habe jetzt mal die utf_8-Notlösung (für die Umlautwörter) hinzugefügt, dann funktioniert es, außer, dass er in der *** ***-AUsgabe die Umlaut-Begriffe gar nicht erst ausgibt, was merkwürdig ist, für die Lösung aber egal.
                        Dachte ich mir schon, weil ich vergessen hatte zu erwähnen, dass die utf_8-Notlösung mit in die Funktion gehört, da ja nur für die Suche mit mb_strpos bestimmt.

                        PHP-Code:
                        function Titelei($titel$letter$end) {

                            
                        $titel utf8_decode($titel); // Oder je nachdem, wie Deine utf_8-Notlösung aussieht.

                            
                        for ($i 0$i $end$i++) {
                        ... 

                        Kommentar

                        Lädt...
                        X