file_get_contents() konvertiert von UTF-8 auf ISO-8859-1
Ich versuche, die Suchergebnisse von yahoo.com.
Aber file_get_contents() konvertiert die UTF-8-Zeichensatz (charset, dass yahoo verwendet) Inhalt ISO-8859-1.
Versuchen:
$filename = "http://search.yahoo.com/search;_ylt=A0oG7lpgGp9NTSYAiQBXNyoA?p=naj%C5%A1%C5%A5astnej%C5%A1%C3%AD&fr2=sb-top&fr=yfp-t-701&type_param=&rd=pref";
echo file_get_contents($filename);
Skripte als
header('Content-Type: text/html; charset=UTF-8');
oder
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
oder
$er = mb_convert_encoding($filename , 'UTF-8');
oder
$s2 = iconv("ISO-8859-1","UTF-8",$filename );
oder
echo utf8_encode(file_get_contents($filename));
NICHT helfen, da nach dem abrufen der web-content-speciall Zeichen wie š ť ž ersetzt die Fragezeichen ???
Ich würde mich über jede Art von Hilfe.
file_get_contents() konvertieren nicht alles
InformationsquelleAutor vladinko0 | 2011-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint dies ein content-negotiation problem wie
file_get_contents
wahrscheinlich eine Anforderung sendet, akzeptiert nur ISO 8859-1 als Zeichenkodierung.Können Sie erstellen eine benutzerdefinierte stream Kontext für
file_get_contents
mitstream_context_create
, die explizit besagt, dass Sie akzeptieren UTF-8:Lustige Sache, ich habe versucht
Accept-Charset=utf-8;q=0.7,*;q=0.7
, funktioniert aber nicht 🙂Der Wert
utf-8;q=0.7,*;q=0.7
ist wieutf-8,*
und akzeptieren würde, jede Zeichenkodierung, ebenso.Nice one Gumbo! Ich hatte echte Probleme mit Umlauten in der url (München) - dies das problem gelöst. Danke!
InformationsquelleAutor Gumbo
file_get_contents sollte nicht ändern Sie den Zeichensatz. Die Daten gezogen wird als Binär-string.
Beim Check-out die von Ihnen angegebene url, das ist der header, der enthält:
Auch in den Körper:
Können, können Sie auch nicht konvertieren UTF-8 verlustfrei zu konvertieren, um ISO-8859-1 und erhalten das Zeichen zurück, wenn Sie gehen zurück auf UTF-8. UTF-8 /unicode unterstützt viele, viele weitere Zeichen, also die Figuren sind verloren in den ersten Schritt.
Im browser ist dies nicht der Fall, so vielleicht brauchen Sie nur, um eine richtige Accept-Encoding-header zu beauftragen yahoo-system, die Sie annehmen kann UTF-8.
Content-Type: text/html; charset=ISO-8859-1
und<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
Wenn ich einen Blick in den Quellcode der Seite sehe ich<!doctype html><html lang="en"><head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
Es dient verschiedenen encoding-basierend auf Ihren Standort, Sie könnten versuchen, abrufen der Seite mit Russischen proxy-Server.
InformationsquelleAutor Evert
Bessere Lösung...
Ich denke, Sie müssen
CURLOPT_FOLLOWLOCATION
habe ich aktualisiert meine Antwort, versuchen Sie es erneut.Jetzt lädt er die Seite, aber mit dem gleichen Ergebnis wie mit file_get_contents() es bedeutet, mit einem Fragezeichen. Charset ist ebenfalls konvertiert werden, ISO-8859-1.
Es scheint, dass yahoo.com ist, die Ihnen verschiedene Seiten (charsets) abhängig von Ihrer IP (Land). Ich änderte Sie Ihre URL
http://ru.search.yahoo.com
aber es funktioniert nicht. Vielleicht können Sie ja etwas erreichen mit accept-charset-Header zu verweigern,ISO-8859-1...InformationsquelleAutor Dejan Marjanovic
Für alle, die Untersuchung auf diese:
Zeit verbrachte ich auf encoding-Fehler hat mich gelehrt, dass nur selten php-Funktionen "magisch" ändern der Codierung von Zeichenketten. (Eines dieser seltenen Beispiele ist :
Bitte beachten Sie auch, dass die Arbeits-header gesetzt ist, wie folgt:
und nicht:
So, ich hatte ein ähnliches Problem wie Sie es beschreiben, es war genug, um die Header richtig.
Hoffe, das hilft!
InformationsquelleAutor Stavros