String mit exaktem Begriff ausschließen

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

  • String mit exaktem Begriff ausschließen

    Hallo, ich möchte aus einen String ausschließen, der AUSSCHLIESSLICH den aus dem Begriff "Region" besteht. Sollte der String aber "Region" als einen Begriff von mehreren enthalten (z. B."....in der Region"), dann soll der String nicht ausgeschlossen werden. Dazu habe ich bisher nix gefunden. Ich hatte es mit strstr versucht, dann werden aber alle strings ausgeschlossen, in denen "Region" vorkommt.

    Gruß und Dank
    newbie1955

  • #2
    2. Versuch

    ich habe versucht, das Problem über die Stringlänge zu lösen. Merkwürdigerweise passsiert folgendes. Ich lese auf einer Seite die h2-tags ein

    PHP-Code:
    $data file_get_contents('http://www.seite.de');  
    $doc = new DOMDocument(); 
    $doc->loadHTML($data); 
    $result $doc->getElementsByTagName("h2"); 
    foreach (
    $result as $node
    {
    $laenge strlen ($node->nodeValue); 
    Auf der Seite steht folgendes:

    HTML-Code:
    <h2><a href="/region">Region</a></h2>
    Wenn ich jetzt mit
    PHP-Code:
    echo $laenge;
    echo 
    $node->nodeValue
    das Ergebnis ausgebe kommt die Länge 19 und der NodeValue "Region".

    Weiß jemand einen Rat?

    Gruß
    newbie1955

    Kommentar


    • #3
      Zitat von newbie1955 Beitrag anzeigen
      ich habe versucht, das Problem über die Stringlänge zu lösen.
      Welches Problem eigentlich? Wenn du wirklich einen exakten Stringvergleich willst – dann tut’s doch ein simples
      PHP-Code:
      'Foo' === 'Foo' 
      absolut ausreichend ...?
      [...] kommt die Länge 19 und der NodeValue "Region".
      Hast du überprüft, ob da nicht vielleicht noch Whitespace im Value mit drin steckt?
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Whitespaces

        Danke für die Antwort. Ja, manchmal denkt mal vielleicht zu kompliziert, aber dennoch, es funktioniert auch mit direktem Vergleich nicht, ich habe ja oben abgedruckt, das der $node->nodeValue zwischen > und < nur aus dem Wort "Region" besteht (So steht es jedenfalls im Quellcode) und wenn ich echo $node->nodeValue ausgebe, kommt ja auch nur das eine Wort, (würde er denn, wenn es whitespaces gäbe, die automatisch bei der echo - Ausgabe trimmen?Nee, oder) Es muss aber noch mehr da sein, (nicht nur wegen der Längenausgabe) denn bei der Abfrage
        PHP-Code:
        if ($node->nodeValue !== "Region"
        kommt "Region" trotzdem....Wie kann ich denn herausfinden, was da noch drinsteckt, mit var_dump doch wohl nicht....denn das hatte ich schon versucht.

        ???
        Gruß
        newbie1955

        Kommentar


        • #5
          Gebe den Wert mal mit urlencode() behandelt aus.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            urlencode

            ausgegeben wird mit urlencode:

            PHP-Code:
            %0D%0A%09%09%09%09%09%09%09%09%09%09%09Region 
            Aber bei echo ohne urlencode bildet er die Zeichen ja nicht ab. "Trimmt" er da automatisch?

            Selber trimmen nützt jedenfalls nix, da kommt dasselbe heraus (sind ja auch keine Leerzeichen). Ich könnte höchstens die Zahl der Wörter zählen und wenn es nur ein Wort ist, dann soll er es ausschließen. Oder was könnte ich noch machen? Hab ich so noch nicht erlebt.

            Gruß und Dank
            newbie1955
            Zuletzt geändert von newbie1955; 31.03.2013, 20:28.

            Kommentar


            • #7
              Zitat von newbie1955 Beitrag anzeigen
              ausgegeben wird mit urlencode:
              PHP-Code:
              %0D%0A%09%09%09%09%09%09%09%09%09%09%09Region 
              Wie ich vermutet habe, Whitespace also.

              Aber bei echo ohne urlencode bildet er die Zeichen ja nicht ab.
              Multiple Whitespace-Zeichen jeglicher Art werden bei der Darstellung als HTML zu einem einzigen Leerzeichen.

              Selber trimmen nützt jedenfalls nix, da kommt dasselbe heraus (sind ja auch keine Leerzeichen).
              Doch, nützt – trim entfernt per default die Whitespace-Zeichen, die in deinem String enthalten sind.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                trimmen

                ..aber ich habe es probiert, habe $node->nodeValue mit urlencode ausgegeben, dann getrimmt, dann nochmal ausgegeben und es kam beide Male dasselbe Ergebnis...
                Habe es jetzt mit dem Wörterzählen gemacht und alle $node->nodeValues ausgeschlossen, die nur aus einem Wort bestehen, ist aber nur eine Notlösung, denn theoretisch könnte ein anderer $node->nodeValue auch nur EIN Wort enthalten und durchaus erwünscht sein.


                Kommentar


                • #9
                  Und $node->nodeValue hattest Du auch schon ohne urlencode getrimmt oder nur gedacht, dass es nichts bringt? Getrimmt wird wohl String vor Weiterverarbeitung und nicht für Ausgabe im Browser, wo es dann auf ein Leerzeichen zusammenschrumpft.

                  Habe es mal kurz getestet.

                  In /test.html:

                  HTML-Code:
                  <h2><a href="www.example.net/region.html">             Region</a></h2>
                  In datei.php:

                  PHP-Code:
                  <?php

                  $data 
                  file_get_contents("http://localhost/test.html");  
                  $doc = new DOMDocument(); 
                  $doc->loadHTML($data); 
                  $result $doc->getElementsByTagName("h2"); 

                  foreach (
                  $result as $node) {

                      
                  $laenge strlen($node->nodeValue); 
                      echo 
                  $laenge;    // Ausgabe: 19

                      
                  $laenge strlen(trim($node->nodeValue)); 
                      echo 
                  $laenge;    // Ausgabe: 6
                  }
                  ?>
                  %0D%0A am Anfang lässt darauf schließen, dass in der HTML auch noch ein Zeilenumbruch enthalten ist. /test.html geändert, um dieses Ergebnis zu erhalten:

                  HTML-Code:
                  <h2><a href="www.example.net/region.html">             
                             Region</a></h2>
                  Mit strlen($node->nodeValue) Ergebnis: 32
                  Mit strlen(trim($node->nodeValue)) Ergebnis: 6
                  Zuletzt geändert von Melewo; 01.04.2013, 13:59.

                  Kommentar


                  • #10
                    Super

                    Keine Ahnung, warum bei mir beide Male dasselbe herauskam, jetzt klappt es, danke!

                    Kommentar

                    Lädt...
                    X