hmhm: utf8 curl

Hallo,

Mein Problem ist recht dringlich darum immer her mit allen möglichkeiten!

Also ich habe einen externen Feed, dar der Server direkten urlaufruf weder mit simplexml selbst noch mit fsockopen oder sonst was erlaubt speichere ich die daten auf meinen Server ab und öffne sie dan mit simplexml

Das ganze passiert mit cURL

Der Output wird wiederum mit cURL dann irgenwo in die Webseite eingefügt.

Dummerweise bekomm ich das mit dem utf8 decode nicht hin, entweder ich hab wirre zeichen oder Fragezeichen, egal wie oft und wo ich den befehl (utf8_encode) setze.

Im header wird alles richtig auf urf8 gesetzt. Da is das problem also nicht.

Hat jemand eine idee woran das liegen könnte?

  
function get_remote_file($url)  
{  
    if (ini_get('allow_url_fopen')) {  
        return file_get_contents($url);  
    }  
    elseif (function_exists('curl_init')) {  
        $c = curl_init($url);  
        curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);  
        curl_setopt($c, CURLOPT_HEADER, 0);  
        $file = curl_exec($c);  
        curl_close($c);  
        return utf8_encode($file);  
    }  
    else {  
        die('Error');  
    }  
}  
  
$Data = get_remote_file('xml link');  
$File = "tmp/xml.xml";  
$Handle = fopen($File, 'w+');  
fwrite($Handle, $Data);  
fclose($Handle);  
  
  
$xmlfile= 'tmp/xml.xml';  
    $xml = simplexml_load_file(rawurlencode($xmlfile));  
	 $i = 0;  
        foreach ($xml->Objekt as $item) {  
				// zimmer Fix - damit nicht 1.0 angezeigt wird, wenn 1 gemeint ist.  
				$immo_zimmer = explode(".",$item->Zimmer);  
				if($immo_zimmer[1] != '0'){ $immo_zimmer = $item->Zimmer; } else { $immo_zimmer = $immo_zimmer[0]; }  
				// Alle Items verarbeiten  
        }  
		$rand = rand(0,$i-1);  
		$x = $tem[$rand];  
		echo '... ausgeben ...';  

Schonmal ein grosses danke!

L.g.
roman

  1. hi,

    Also ich habe einen externen Feed,

    Du redest von xml. D.h. utf-8. Du kriegst einen Feed in utf-8 oder wie sind die Zeichen in Deinem Fall codiert? Hastu Beispiel-Link?

    Hotti

    1. hi,

      Also ich habe einen externen Feed,

      Du redest von xml. D.h. utf-8. Du kriegst einen Feed in utf-8 oder wie sind die Zeichen in Deinem Fall codiert? Hastu Beispiel-Link?

      Link möcht ich nicht Posten, ist kundenspezifisch.
      Aber der Feed beginnt so:
      <?xml version="1.0" encoding="ISO-8859-1"?>

      ü steht auch so da wie es ist, also ü.
      Denke das mir nicht nur Opera den gefallen tut?!

      Meine Hauptidee wäre ja bei der get_... funktion bei return das utf8_encode rdranzuhängen, aber das macht die zeichen nur noch wirrer.

      Danke schonmal
      l.g.

      1. hi,

        Link möcht ich nicht Posten, ist kundenspezifisch.

        oki.

        Aber der Feed beginnt so:
        <?xml version="1.0" encoding="ISO-8859-1"?>

        Auch ok, sofern die darin enthaltenen Zeichen o.g. Codierung entsprechen. Jetzt musst Du nur noch in Deiner Seite, die den Feed darstellt, genau dieselbe Codierung einstellen und allet wird joot.

        1. Dein Http-Header:
        Content-type: text/html; charset=ISO-8859-1

        2. Meta Tag
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

        Hotti

        1. Auch ok, sofern die darin enthaltenen Zeichen o.g. Codierung entsprechen. Jetzt musst Du nur noch in Deiner Seite, die den Feed darstellt, genau dieselbe Codierung einstellen und allet wird joot.

          1. Dein Http-Header:
            Content-type: text/html; charset=ISO-8859-1

          2. Meta Tag
            <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

          Hallo Hotti,

          schöner gedanke, leider funktionier das ganze nocht so einfach...
          Warum auch immer!? Irgentwie unlogisch oder?

          Nja jedenfalls ändert sich nichts...

          l.g.

          1. hi,

            schöner gedanke, leider funktionier das ganze nocht so einfach...
            Warum auch immer!? Irgentwie unlogisch oder?

            Naja, wenn iso-8859-1 draufsteht, sollte auch iso-8859-1 drin sein. Vermutlich ist das nicht der Fall, also prüf mal Deine Datenquelle, die den Feed erstellt, in welcher Codierung die Zeichen da tatsächlich vorliegen. Dat muss schon zusammenpassen, wenn nicht, ist es nicht unlogisch, dass das Ergebnis nicht Deiner Erwartung entspricht.

            Hotti

            --
            Der Code macht schon das was er soll, aber es ist nicht das was Du willst.
      2. Hi!

        Aber der Feed beginnt so:
        <?xml version="1.0" encoding="ISO-8859-1"?>
        ü steht auch so da wie es ist, also ü.

        Je nach verwendeter Zeichenkodierung wird ein ü mit unterschiedlichen Byte(s) abgebildet. Schau dir mit einem Hex-Editor an, was tatsächlich für Bytes im Feed stehen.

        Meine Hauptidee wäre ja bei der get_... funktion bei return das utf8_encode rdranzuhängen, aber das macht die zeichen nur noch wirrer.

        Erst analysieren, was wirklich ist, dann Maßnahmen erwägen! Alles andere ist kopflose Testerei, die vielleicht zufällig funktioniert oder auch nicht. Dazu solltest du erst einmal deine Vorstellungen von der Zeichenkodier-Problematik entwirren, und so genau wie möglich berichten, mit der Darlegung, was zu sehen ist, damit man daraus bessere Schlussfolgereungen ziehen kann als aus einem nebulösen "wirre Zeichen".

        Lo!

        1. Hallo dedifix

          Erst analysieren, was wirklich ist, dann Maßnahmen erwägen! Alles andere ist kopflose Testerei, die vielleicht zufällig funktioniert oder auch nicht. Dazu solltest du erst einmal deine Vorstellungen von der Zeichenkodier-Problematik entwirren, und so genau wie möglich berichten, mit der Darlegung, was zu sehen ist, damit man daraus bessere Schlussfolgereungen ziehen kann als aus einem nebulösen "wirre Zeichen".

          Scharfes S = ß
          ü = ü

          Zumindest jetzt gerade wo ich wie mir von hotti geraten wurde die header verändert habe auf $ISO....

          l.g.

          1. Hi!

            Scharfes S = ß
            ü = ü

            Das sind UTF-8-kodierte Zeichen, wenn sie als ISO-8859-1 interpretiert werden.

            Lo!

            1. Hi!

              Scharfes S = ß
              ü = ü

              Das sind UTF-8-kodierte Zeichen, wenn sie als ISO-8859-1 interpretiert werden.

              Lol xD
              Ich glaub damit sollt ich mich mal ausernander setzen! Spannend!

              Nur was heisst das für mich?

              Wenn ich den Header jetzt wieder zurück setze auf:
              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

              Bleiben die zeichen die selben...

              Sorry wenn ich mich dumm anstelle...

              1. Hi!

                Ich glaub damit sollt ich mich mal ausernander setzen! Spannend!

                Das wäre was für den Einstieg: http://www.w3.org/International/questions/qa-what-is-encoding.de.php

                Nur was heisst das für mich?
                Wenn ich den Header jetzt wieder zurück setze auf:
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
                Bleiben die zeichen die selben...

                Bitte beschreibe nachvollziehbar! Was war nun konkret? Wenn du

                <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

                verwendest, siehst du diese Seite im Browser betrachtend ß für ß und ü für ü. Stellst du bei charset stattdessen auf utf-8, bleiben die Zeichen gleich oder kommt nun ß und ü? (Reload gemacht? Nicht das der Browser-Cache dich ärgert.)

                Lo!

                1. Hi!

                  Ich glaub damit sollt ich mich mal ausernander setzen! Spannend!

                  Das wäre was für den Einstieg: http://www.w3.org/International/questions/qa-what-is-encoding.de.php

                  Lektüre für die nächste Freie minute (Stunde ^^)
                  Danke!

                  Nur was heisst das für mich?
                  Wenn ich den Header jetzt wieder zurück setze auf:
                  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
                  Bleiben die zeichen die selben...

                  Bitte beschreibe nachvollziehbar! Was war nun konkret? Wenn du

                  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>

                  verwendest, siehst du diese Seite im Browser betrachtend ß für ß und ü für ü. Stellst du bei charset stattdessen auf utf-8, bleiben die Zeichen gleich oder kommt nun ß und ü? (Reload gemacht? Nicht das der Browser-Cache dich ärgert.)

                  Ja ü bleibt ü

                  Klar habe ich den Cache geleert, auch wenn das bei Opera meist gar nicht nötig ist! (wo ich mich frage wie er dan so schnell sein kann? aber back to topic ^^)

                  Geändert hats trotzdem nichts...

                  Jetzt wirds aber spannend!
                  Local geht es!!! (mit urf8 im header, wohlgemerkt)

                  Aber am Server des kunden nicht!

                  Identische Datein, 2 verschiedene Ausführungen... jetzt kenn ich mich gar nicht mehr aus... Was ist bloss los???

                  L.g.

                  1. Hi,

                    Jetzt wirds aber spannend!
                    Local geht es!!! (mit urf8 im header, wohlgemerkt)

                    Aber am Server des kunden nicht!

                    Identische Datein, 2 verschiedene Ausführungen... jetzt kenn ich mich gar nicht mehr aus... Was ist bloss los???

                    Vielleicht sendet der Server im Content-Type-Header eine abweichende Angabe zur verwendeten Zeichenkodierung.

                    MfG ChrisB

                    --
                    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]