ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
507
507
EMPFEHLEN
-
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?
-
20.11.11 17:39 #2
- 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 ;-)
-
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.
-
20.11.11 17:50 #4
- 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 ;-)
-
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)
-
20.11.11 20:21 #6
- 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 ;-)
-
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
-
Zeichensatz?
Von Maik20 im Forum PHPAntworten: 2Letzter Beitrag: 14.02.09, 16:56 -
Zeichensatz
Von Athro im Forum HTML & XHTMLAntworten: 10Letzter Beitrag: 08.01.07, 11:00 -
Zeichensatz ermitteln?
Von klaeuschen41 im Forum HTML & XHTMLAntworten: 21Letzter Beitrag: 18.08.06, 13:05 -
zeichensatz
Von bmxvoodoo im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 27.09.05, 09:54 -
zeichensatz problem?
Von mcreisi im Forum Flash PlattformAntworten: 2Letzter Beitrag: 16.04.05, 23:30





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren