こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

file_get_contentsのURI処理

$strTextA = file_get_contents($url);
とした場合に例えば
$actor = '俳優の名前' ;
$url = 'http://hogehoge.org/wiki/' . urlencode( $actor ) ;
とすると、そのページを入手できますが、さらに_や()がついているページ
$url = 'http://hogehoge.org/wiki/' . urlencode( $actor . '_(俳優)') ;
とすると、ページは存在するのにそのページを入手することができません。
(wikiなどでよく俳優さんは曖昧性排除の為に
後ろにXXX_(俳優) というURL表記になっていてますが、これを入手したい)
特に2つのページに差がある訳でもなさそうなので
urlの指定の仕方に問題があると思ってます
括弧やアンダーラインなどの処理でurlencodeに加えて
何かやり方があれば、教えてください

投稿日時 - 2012-10-19 06:09:15

QNo.7755530

困ってます

質問者が選んだベストアンサー

見た感じ大丈夫なような気がしますが
なにか根本的な見落としはありませんか?

<?PHP
$u1="http://ja.wikipedia.org/wiki/%E7%94%B0%E6%9D%91%E4%BA%AE_%28%E4%BF%B3%E5%84%AA%29";
$u2="http://ja.wikipedia.org/wiki/".urlencode("田村亮_(俳優)");
print $u1===$u2?"OK":"NG";;

投稿日時 - 2012-10-19 09:28:48

補足

yambejpさん
早速のご回答ありがとうございます。
確かにurlencodeした文字列$u2は、こちらの環境でも$u1と一致します。
しかし、その$u1もしくは$u2をfile_get_contentsしようとすると
HTTP/1.0 403 Forbiddenといわれます。手入力では、そのHomepageにアクセスできます。

具体的例では
<?php
$actor = "森雅之" ;
echo "役者:" . $actor;
$urlA = 'http://ja.wikipedia.org/wiki/' . urlencode( $actor ) ;
$urlB = 'http://ja.wikipedia.org/wiki/' . urlencode( $actor . "_(俳優)") ;

$str = file_get_contents($urlB);
if (!($str)) {
$str = file_get_contents($urlA);
}else{
echo "役者:" . $actor. "_(俳優)" ;
}
として
$urlAも$urlBも存在するHomePageなんですが$urlBは
Warning: file_get_contents(http://ja.wikipedia.org/wiki/%E6%A3%AE%E9%9B%85%E4%B9%8B_%28%E4%BF%B3%E5%84%AA%29) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden
とはじかれるので、同じwikipediaで片方だけはじかれているし
file_get_contentsの使い方に問題あると考えている訳なのです

投稿日時 - 2012-10-20 05:25:51

お礼

いろいろ試行錯誤してみるも未だに原因の解決には至っておらず
データの入手ができない状況ではありますが、大変勉強になりました
ありがとうございました

投稿日時 - 2012-11-03 05:24:21

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問