2012-05-01 17 views
6

file_get_contentsを使用してリモートサーバーから画像を取得しようとしています。イメージへのURLには、é、á、íなどの特殊文字やスペースが含まれている場合があります。また、HTTPコード400 - Bad Requestで操作が失敗する場合もあります。 urlencodeまたはrawurlencodeを使用してURL(またはそのURLのセグメント)をエンコードしようとすると、404が表示されます。file_get_contents - URLの特殊文字

画像URLにスペースや特殊文字が含まれていない場合、問題なくダウンロードされます。

これはエンコーディングと何か関係がありますが、私はそれを理解できません。 エンコードオプションがありますか?要求に設定する必要があるヘッダがありますか?

+2

http://stackoverflow.com/questions/2236668/file-get-contents-breaks-up-utf-8-characters –

+1

alickus:それは実際にはありません重複していると、あなたがリンクしている質問は、URLではなく、応答内容のUTF-8に関するものです。 – Kaivosukeltaja

+1

あなたのブラウザでそのイメージを開きます。ブラウザがURLをどのようにエンコードするかをご覧ください。次に、 'echo urlencode($ url);'の出力を見て、違いを見つけます – galymzhan

答えて

1

のfile_get_contentsに問題がUTF-8エンコーディング(PHPにはまだ実装されていませんでした) あなたはこの機能を使用してファイルをダウンロードしたい場合、あなたはあなたのURLにそのような何かをしなければならないです。

$url_utf8 = rawurlencode(utf8_encode($url));

以降:

$content = file_get_contents($url_utf8);

+1

これは、PHPファイルが 'ISO-8859-1'として保存されていない限り、予期しない結果につながる可能性があります。 –