file_get_contents() convertit en UTF-8, ISO-8859-1
Je suis en train d'obtenir des résultats de recherche à partir de yahoo.com.
Mais file_get_contents() convertit en UTF-8 jeu de caractères (charset, que yahoo utilise) le contenu de l'ISO-8859-1.
Essayer:
$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);
Les Scripts de
header('Content-Type: text/html; charset=UTF-8');
ou
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
ou
$er = mb_convert_encoding($filename , 'UTF-8');
ou
$s2 = iconv("ISO-8859-1","UTF-8",$filename );
ou
echo utf8_encode(file_get_contents($filename));
Aide PAS, parce que, après l'obtention de contenu web speciall personnages comme š " ž sont remplacés par des points d'interrogation ???
J'aimerais avoir de l'aide.
file_get_contents() ne convertit pas rien
OriginalL'auteur vladinko0 | 2011-04-08
Vous devez vous connecter pour publier un commentaire.
Ce qui semble être un la négociation de contenu problème que
file_get_contents
probablement envoie une demande qui n'accepte ISO 8859-1 que l'encodage des caractères.Vous pouvez créer un contexte de flux pour
file_get_contents
à l'aide defonction stream_context_create
qui stipule explicitement que vous acceptez UTF-8:Drôle de chose, j'ai essayé
Accept-Charset=utf-8;q=0.7,*;q=0.7
, mais ne fonctionne pas 🙂La valeur
utf-8;q=0.7,*;q=0.7
est commeutf-8,*
et accepte l'encodage de caractère aussi.Une belle Gumbo! J'ai eu du mal avec les accents dans l'url (Munich) - cela a résolu le problème. Merci!
OriginalL'auteur Gumbo
file_get_contents devrait pas modifier le jeu de caractères. Les données sont extraites en une chaîne binaire.
Lors de la vérification de l'url que vous avez fourni, c'est l'en-tête:
Aussi, dans le corps:
Aussi, vous ne pouvez pas convertir en UTF-8 sans perte convertir ISO-8859-1 et d'obtenir les caractères de retour lors de la reprise de l'UTF-8. UTF-8 /unicode prend en charge de nombreux beaucoup plus de personnages, donc les personnages sont perdus dans la première étape.
Dans le navigateur, ce n'est pas le cas, alors peut-être vous avez juste besoin de fournir un bon-tête Accept-Encoding pour instruire de yahoo système, vous pouvez accepter de l'UTF-8.
Content-Type: text/html; charset=ISO-8859-1
et<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
Quand je me regarde dans le code source de la page, et je vois<!doctype html><html lang="en"><head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
Il sert de codage différents en fonction de votre emplacement, vous pouvez essayer de chercher de page à l'aide russe des serveurs proxy.
OriginalL'auteur Evert
Meilleure solution...
Je pense que vous devez définir
CURLOPT_FOLLOWLOCATION
, j'ai mis à jour ma réponse, essayez de nouveau.Maintenant, il charge la page, mais avec le même résultat qu'avec file_get_contents (), cela signifie avec des points d'interrogation. Jeu de caractères est également converti en ISO-8859-1.
Il semble que yahoo.com est de servir des pages différentes (jeux de caractères) en fonction de votre adresse IP (pays). J'ai changé l'URL
http://ru.search.yahoo.com
mais ça ne fonctionne pas. Peut-être que vous pouvez réaliser quelque chose avec le charset en-têtes de,refuser la norme ISO-8859-1...OriginalL'auteur Dejan Marjanovic
Pour quelqu'un d'enquêter sur ce:
Le temps que j'ai passé sur les problèmes d'encodage m'a appris que rarement des fonctions php comme par "magie" modification de l'encodage des chaînes de caractères. (L'un de ces rares exemples est :
Veuillez noter également que le travail de l'en-tête set est comme suit:
et non pas:
Que j'ai eu un problème similaire que celui que vous décrivez, c'était suffisant pour définir les en-têtes correctement.
Espérons que cette aide!
OriginalL'auteur Stavros