参考サイト:PHPでWEBページのタイトルを抜き出すサンプル
http://creazy.net/2008/05/php_get_page_title_sample.html
こんな感じで書いて動かしてみる
echo "PageTitle:". getPageTitle("http://www.google.co.jp/"); function getPageTitle($url) { $html = file_get_contents($url); $html = mb_convert_encoding($html, "UTF-8", "auto" ); if (preg_match( "/<title>(.*?)</title>/i", $html, $matches)) { return $matches[1]; } else { return "タイトル取れなかった"; } }
実行すると、一応結果は表示される…が!
Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding
って出る、解決するには、
$html = mb_convert_encoding($html, mb_internal_encoding());
と、”auto”を消すだけだった。
これで、”一応取”得はできた
次に今のコードで、
http://headlines.yahoo.co.jp/hl?a=20110321-00000046-jij-soci
ここの名前を取ろうとすると…
見事に文字化けする!
(ちなみに、”auto” 付けてもダメでした)
勝手にエンコードの種類を特定して勝手にしてくれるのかと思ってた…
もしかして:このページが EUC-JP で出来てるから?
取りあえず、ゴニョゴニョしてみる
結論こんなコードになった。
echo "PageTitle:". getPageTitle("http://headlines.yahoo.co.jp/hl?a=20110321-00000046-jij-soci"); function getPageTitle( $url ) { $html = file_get_contents($url); $enc_format = "JIS, eucjp-win, sjis-win, UTF-8"; $html = mb_convert_encoding($html, "UTF-8", $enc_format); if ( preg_match( "/<title>(.*?)</title>/i", $html, $matches) ) { return $matches[1]; } else { return "タイトル取れなかった"; } }
“auto”じゃなく、形式を指定してあげればいいみたい
ちなみに、なぜ、eucjp-win とか付けるのか?
参考サイト:SJISじゃなくてSJIS-win、EUC-JPじゃなくてeucJP-winを使おう
http://pentan.info/php/sjiswin_eucjpwin.html
以上終わりです。
っと思ったけど、まだ続きがある!
世の中にはこんなサイトもある、
( ゚д゚)…
?!
改行が…
まぁ、正規表現変えればいいだけなんだけどねw
preg_match( "/<title>(.*?)</title>/is", $html, $matches)
/なんとか/i が文字列の大文字・小文字を区別しない
/なんとか/is が大文字・小文字を区別せず、1行とみなして調べる
こんな感じ
結論!
$br = "<br />n"; $url = "http://headlines.yahoo.co.jp/hl?a=20110321-00000046-jij-soci"; echo "PageTitle:". getPageTitle($url). $br; 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)){ //echo mb_detect_encoding($html, $enc_format). "<br />n"; return $matches[1]; } else { return false; } }
以上です、お疲れ様でした。
追伸:改行が入るかも…