• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サイト名を取得するPHP)

PHPでサイト名を取得する方法

このQ&Aのポイント
  • PHPで指定したURLのhtmlファイルから<title>タグ内のサイト名を抜き出す方法について説明します。
  • 具体的なコードを紹介しますが、エラーが発生する場合に注意点も説明します。
  • エラーの原因と解決策についても解説し、問題を解決する方法を提供します。

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

  • ベストアンサー
  • tomaju
  • ベストアンサー率76% (84/110)
回答No.3

警告が2種類出ています。 > Warning: mb_detect_encoding() expects at least 1 parameter, 0 given mb_detect_encoding() は最低でも1つはパラメータが必要だけど、 ひとつも与えられてないよ、と警告されています。 $html = mb_convert_encoding($html, mb_internal_encoding(), "auto" ); //(2) ここで、mb_detect_encoding() を mb_internal_encoding() に戻してみると どうでしょうか。 > Warning: file_get_contents(http://blog.livedoor.jp/dqnplus/ ) [function.file-get-contents]: > failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in こちらは、URLの末尾に \r が付いているのではないかと思います。 foreach($array as $values){ $url = trim($values); echo $values."+".getPageTitle($values); echo "\n"; } $url = trim($values); で、$values を trim にかけた結果が $url に入っていますが、 $url が使われていません。 $values ではなく $url を getPageTitle に渡してください。 foreach($array as $values){ $url = trim($values); echo $url."+".getPageTitle($url); echo "\n"; } あるいは、$values がよければ、 trim の結果を $values に代入してください。 foreach($array as $values){ $values = trim($values); echo $values."+".getPageTitle($values); echo "\n"; } http://php.net/manual/ja/function.trim.php

spinia0120
質問者

お礼

ご回答ありがとうございます。 教えていただいたところを訂正し、関数の文字化けを参考にしながら直したらここまでできました。 <?php /** * ページタイトルを取得する関数 */ function getPageTitle($url){ $html = file_get_contents($url); $enc_format = "JIS, eucjp-win, sjis-win, UTF-8"; $enc_html = mb_convert_encoding($html, "UTF-8", $enc_format); if(preg_match( "/<title>(.*?)<\/title>/is", $enc_html, $matches)){ return $matches[1]; } else { return false; } } $filename="url.txt"; $data=file_get_contents($filename); $array = split("\n",$data); foreach($array as $values){ $url = trim($values); echo $url."+".getPageTitle($url); echo "\n"; } ?> --- http://wired.jp/+ WIRED.jp 世界最強の「テクノ」ジャーナリズム http://workingnews.blog117.fc2.com/+ http://blog.livedoor.jp/dqnplus/+痛いニュース(ノ∀`) - ライブドアブログ http://yahoo.com/+Yahoo! --- echo "\n";を指定しているにもかかわらず各行が改行されないのと、fc2.comのtitleが取得されないのは何故なのでしょうか。 よろしくお願いします。

その他の回答 (2)

  • tomaju
  • ベストアンサー率76% (84/110)
回答No.2

エラーメッセージは次のようなものではないでしょうか? PHP Warning: file_get_contents() expects parameter 1 to be string, array given in ファイル名 on line 行番号 foreach のループ内で getPageTitle に $array を渡しています。 foreach($array as $values){ echo $array."+".getPageTitle($array); } この foreach ループでは、配列 $array から要素が次々取り出されて $values に入りますので、 質問者さんがやりたいことは下記のようになるかと思います。 foreach($array as $values){ echo $values."+".getPageTitle($values); } http://php.net/manual/ja/control-structures.foreach.php おまけ: url.txt の改行コードが CRLF (\r\n) の場合、 \r が残って動作がおかしくなるかもしれません。 その場合は trim 関数等で取り除くとよいと思います。 foreach($array as $values){ $url = trim($values); echo $url."+".getPageTitle($url); }

spinia0120
質問者

お礼

ありがとうございます。 【gettitle.php】 --- <?php /** * ページタイトルを取得する関数 */ function getPageTitle( $url ) { $html = file_get_contents($url); //(1) $html = mb_convert_encoding($html, mb_detect_encoding(), "auto" ); //(2) if ( preg_match( "/<title>(.*?)<\/title>/i", $html, $matches) ) { //(3) return $matches[1]; } else { return false; } } $filename="url.txt"; $data=file_get_contents($filename); $array = split("\n",$data); foreach($array as $values){ $url = trim($values); echo $values."+".getPageTitle($values); echo "\n"; } ?> --- 【url.txt】 --- http://wired.jp/ http://workingnews.blog117.fc2.com/ http://blog.livedoor.jp/dqnplus/ http://yahoo.com/ --- これで実行してみましたが、 Warning: mb_detect_encoding() expects at least 1 parameter, 0 given in C:\xampplite\htdocs\geturltitle.php on line 7 http://wired.jp/ +HELLO, WORLD « WIRED.jp ????????????????? Warning: mb_detect_encoding() expects at least 1 parameter, 0 given in C:\xampplite\htdocs\geturltitle.php on line 7 http://workingnews.blog117.fc2.com/ +404 Error - FC2??? Warning: file_get_contents(http://blog.livedoor.jp/dqnplus/ ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampplite\htdocs\geturltitle.php on line 6 Warning: mb_detect_encoding() expects at least 1 parameter, 0 given in C:\xampplite\htdocs\geturltitle.php on line 7 http://blog.livedoor.jp/dqnplus/ + Warning: mb_detect_encoding() expects at least 1 parameter, 0 given in C:\xampplite\htdocs\geturltitle.php on line 7 http://yahoo.com/+Yahoo! というエラーが出てきます。 このエラーの解決方法を教えてください。 どうかよろしくお願いします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>mb_internal_encoding() mb_detect_encoding()じゃなくて?

spinia0120
質問者

お礼

ご回答ありがとうございます。 その部分を書き換えましたが、やはりエラーが出ます。

関連するQ&A