tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
507
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von kramoo
    kramoo kramoo ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Ort
    Österreich
    Beiträge
    57
    Muss zwei string vergleichen. Dabei habe ich das Problem das ein mal der string aus der Datenbank kommt wo alles UTF-8 codiert ist zum anderen kommt der string von verschiedenen Webseiten wo ich nicht weiß ob diese UTF-8 oder ISO-8859-1 ist.

    Das heißt ich müsste zuerst irgendwie ermitteln welcher Zeichensatz die Serverrückgabe verwendet und wenn nicht UTF-8 dann in UTF-8 codieren da sonst der Stringverlgeich nicht funktioniert.

    Habe aber dazu nicht wirklich eine Lösung finden können? Kennt Ihr eine Möglichkeit?
     

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Du kannst den HTTP-Header auslesen, der vom Server zurück kommt, von dem die Seite abgeholt wird. Wie das geht, hängt masßgeblich davon ab, wie du die Seiten abholst. Im alleräußersten Fall könnte man noch versuchen, mb_check_encoding zu verwenden, davon rate ich aber ab. Die Ergebnisse könnten falsch sein. Das funktioniert aber nur, wenn die Erweiterung mbstring (multi-byte-string) in PHP aktiv ist (siehe phpinfo()).

    Allerdings musst du dich ebenfalls darauf verlassen können, das der Remote-Webserver das korrekte Encoding liefert.

    Aber es ist rätselraten, bis du erklärst, wie du die Seiten abholst.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    Avatar von kramoo
    kramoo kramoo ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Ort
    Österreich
    Beiträge
    57
    OK.
    Hole die Seiten mittels cUrl ab. Dazu simuliere ich einen Browser.
    Verwende auch $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; dazu.
    Danach werden die Links aus der Seite mit dem Link in meiner DB verglichen. Und da habe ich das Problem das bei Sonderzeichen der Linktext nicht übereinstimmt.
     

  4. #4
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Was sagt

    Code php:
    1
    2
    3
    4
    
    $response_headers = curl_getinfo($ch);
    echo "<pre>";
    var_dump($response_headers);
    echo "</pre>";

    nach dem curl_exec() aufgerufen wurde?

    EDIT: das $ch muss natürlich durch dein curl-Handle ersetzt werden.

    EDIT2: Ich habe noch vergessen, zu erwähnen, das folgende Zeile noch vor dem curl_exec() vorhanden sein muss:

    Code php:
    1
    
    curl_setopt($ch, CURLOPT_HEADER, 1);

    Auch hier wieder $ch durch die Variable ersetzen, die bei dir das Curl-Handle repräsentiert.
    Geändert von saftmeister (20.11.11 um 17:58 Uhr)
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  5. #5
    Avatar von kramoo
    kramoo kramoo ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Ort
    Österreich
    Beiträge
    57
    hmm ist anscheinend UTF-8
    Dann muss ich noch etwas mehr erklären weil ich gerade nicht mehr weiß woran es noch liegen kann.

    Habe zwei seiten als Beispiel die ich auslese und den Linktext vergleiche.

    Seite 1 wird Umlaut richtig angezeigt im Linktext:

    Ausgabe Linktext in eine TEXTDATEI:
    Ökostrom

    Ausgabe var_dump($response_headers);
    Code :
    1
    2
    3
    4
    5
    
    array(21) {
      ["url"]=>
      string(87) "http://oekostrom-vergleich.org/vorne-dabei-beim-oekostromvergleich-die-stadtwerke-husum"
      ["content_type"]=>
      string(24) "text/html; charset=UTF-8"

    Seite 2 wird Umlaut nicht richtig dargestellt im Linktext:

    Ausgabe Linktext in eine TEXTDATEI:
    günstiger Stromanbieter

    Ausgabe var_dump($response_headers);
    Code :
    1
    2
    3
    4
    5
    
    array(21) {
      ["url"]=>
      string(133) "http://www.strompreisvergleich-kostenlos.de/blog/490/490_teldafax-undndash%3B-einst-ein-guenstiger-stromanbieter-heute-insolvent.html"
      ["content_type"]=>
      string(24) "text/html; charset=UTF-8"

    Anbei der Codeauszug:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    
    function ... 
    {
            $url = 'http://www.strompreisvergleich-kostenlos.de/blog/490/490_teldafax-undndash%3B-einst-ein-guenstiger-stromanbieter-heute-insolvent.html';
            $header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            $header[] = "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3";
            $header[] = "Accept-Encoding: gzip,deflate";
            $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
            $header[] = "Keep-Alive: 115";
            $header[] = "Connection: keep-alive";
            $header[] = "Pragma: no-cache";
            $header[] = "Cache-Control: no-cache";
     
            $cookie = tempnam ("../tmp", "CURLCOOKIE");
            $ch = curl_init();
            curl_setopt( $ch, CURLOPT_URL, $url );
            curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 GTB7.1" );
            curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
            curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
            curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
            curl_setopt( $ch, CURLOPT_ENCODING, 'gzip,deflate' );
            curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
            curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
            curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
            curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
            curl_setopt( $ch, CURLOPT_MAXREDIRS, 5 );
     
      $html = curl_exec($ch); // führt curl aus
        
        /*$response_headers = curl_getinfo($ch);
        echo "<pre>";
        var_dump($response_headers);
        echo "</pre>";*/
        
      curl_close($ch); // schließt curl wieder
     
      return $html; // gibt den Inhalt der Seite zurück 
    } // schließt die Funktion 
     
    // Abarbeiten und prüfen aller Links mit der do while Schleife
    do { 
     
    $html = get_url($backlink_url); // funktion aufrufen cUrl und Übergabe der Backlinkurl
     
    // parse the html into a DOMDocument
    $dom = new DOMDocument();
    @$dom->loadHTML($html);
     
    // grab all the on the page
    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate("/html/body//a");
     
     
        for ($i = 0; $i < $hrefs->length; $i++) {
     
        $href = $hrefs->item($i);
        $url = $href->getAttribute('href');
        $ankertext = $href->nodeValue;
                            
       echo $ankertext;

    Wenn ich die Links ohne Header und Zeichensatz ausgeben lasse sehen sie so aus.
    Ökostrom
    günstiger Stromanbieter

    Der erste ist UTF-8 oder?
    Aber was ist mit dem zweiten Link?
    Geändert von kramoo (20.11.11 um 18:30 Uhr)
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Also mit diesem PHP-Code kommen alle Zeichen bei mir korrekt im Browser an:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    
    <?php
    header('Content-Type: text/html; charset=utf-8');
    function get_url($url)
    {
        $header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        $header[] = "Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3";
        $header[] = "Accept-Encoding: gzip,deflate";
        $header[] = "Accept-Charset: iso-8859-1,utf-8;q=0.7,*;q=0.7";
        $header[] = "Keep-Alive: 115";
        $header[] = "Connection: keep-alive";
        $header[] = "Pragma: no-cache";
        $header[] = "Cache-Control: no-cache";
     
        $cookie = tempnam ("../tmp", "CURLCOOKIE");
        $ch = curl_init();
        curl_setopt( $ch, CURLOPT_URL, $url );
        curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 GTB7.1" );
        curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
        curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
        curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
        curl_setopt( $ch, CURLOPT_ENCODING, 'gzip,deflate' );
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
        curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
        curl_setopt( $ch, CURLOPT_MAXREDIRS, 5 );
     
        $html = curl_exec($ch); // führt curl aus
     
        /*$response_headers = curl_getinfo($ch);
         echo "<pre>";
        var_dump($response_headers);
        echo "</pre>";*/
     
        curl_close($ch); // schließt curl wieder
     
        return utf8_decode($html); // gibt den Inhalt der Seite zurück
    } // schließt die Funktion
     
    $urls = array(
    'http://www.strompreisvergleich-kostenlos.de/blog/490/490_teldafax-undndash%3B-einst-ein-guenstiger-stromanbieter-heute-insolvent.html',
    'http://oekostrom-vergleich.org/vorne-dabei-beim-oekostromvergleich-die-stadtwerke-husum'
    );
     
    // Abarbeiten und prüfen aller Links mit der do while Schleife
    foreach($urls as $url) {
        $html = get_url($url); // funktion aufrufen cUrl und Übergabe der Backlinkurl
     
        // parse the html into a DOMDocument
        $dom = new DOMDocument();
        @$dom->loadHTML($html);
     
        // grab all the on the page
        $xpath = new DOMXPath($dom);
        $hrefs = $xpath->evaluate("/html/body//a");
     
     
        for ($i = 0; $i < $hrefs->length; $i++) {
     
            $href = $hrefs->item($i);
            $url = $href->getAttribute('href');
            $ankertext = $href->nodeValue;
     
            echo $ankertext;
        }
    }
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    Avatar von kramoo
    kramoo kramoo ist offline Mitglied Silber
    Registriert seit
    Nov 2010
    Ort
    Österreich
    Beiträge
    57
    Danke aber funktioniert leider nur bei diesen zwei Links.
    Bei diesem Link 'http://www.vitabia.de/wellness/wellnesshotel-im-schwarzwald-erholung-und-natur-pur' bekomme ich gar keinen Linktext mehr angezeigt. Insgesamt habe ich ja mehr als 2.000 Links zum testen.

    Problem macht das return utf8_decode($html); Werde mal versuchen utf8_decode etwas später vielleicht zu verwenden.
     

Ähnliche Themen

  1. Zeichensatz?
    Von Maik20 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 14.02.09, 16:56
  2. Zeichensatz
    Von Athro im Forum HTML & XHTML
    Antworten: 10
    Letzter Beitrag: 08.01.07, 11:00
  3. Zeichensatz ermitteln?
    Von klaeuschen41 im Forum HTML & XHTML
    Antworten: 21
    Letzter Beitrag: 18.08.06, 13:05
  4. zeichensatz
    Von bmxvoodoo im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 27.09.05, 09:54
  5. zeichensatz problem?
    Von mcreisi im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 16.04.05, 23:30