ページタイトル(titleタグ内の文字列)を取得する:PHP,Javascript

以前に「

」の一部で タイトルタグの間の文字列を取得するスクリプトを紹介しましたが、もっと短くできました。

 

<?php

function getTitle( $url ) {
	
	$byte = 256;
	
	while(empty($matches)){
		
		//無限ループにならないようにバイト数を制限
	
		if($byte > 10000){ 
	
			break; 
	
		}
		
		//file_get_contents($url)でも読めるが、バイト数指定で読み込む
		$html = file_get_contents($url, NULL, NULL, 0, $byte); 
	
		preg_match("@<title.*?>(.*?)</title>@i" , $html, $matches);
	
		$byte= $byte + 256;
	
	}

	$html = $matches[1];
	
	$html = mb_convert_encoding($html, mb_internal_encoding(), "auto" ); 
	
	return($html);
	
}

echo getTitle("http://qwerty.work");

?>

タイトルタグが見つからなかったり、 タイトルタグよりも前に大量の文字列があると読み込みに時間がかかるので、読み込みのバイト数上限を決め、タイトルが見つかるまで徐々に読み込みバイト数を増やしていくようにしました。

↓上記でhttp://qwerty.workのタイトルを取得した結果

 

20011/03/06追記

PHPのクラスライブラリPEARのパッケージ(iHTTP_Client)を使った方法が見つかったのでメモ。

こっちの方が**高速!**な感じがします…。

※PEARのパッケージHTTP_Clientと依存関係にあるHTTP_Request2が必要です。

<?php

function getTitle($targetUrl){
	
	require_once $_SERVER['DOCUMENT_ROOT']."/lib/PEAR/HTTP_Client/Client.php"; 
	
	$client =& new HTTP_Client();
	$client->get($targetUrl); 
	$response = $client->currentResponse(); 
	
	//余計な改行コードをスペースに変換
	$response = str_replace( array( chr(10), chr(13), chr(9) ), chr(32), $response['body'] ); 
	
	preg_match("/<title.*?>(.*?)<\/title>/", $response, $title_matches); 
	
	$title = $title_matches[1];	
	$title = mb_convert_encoding($title, mb_internal_encoding(), "auto" );  
	
	return($title);
    
}

echo getTitle("http://qwerty.work");

?>

 

ついでにJavascriptでタイトルを取得する方法もメモ。

※現在のURLのタイトルしか取得できません。

<script type="text/javascript">
	document.write("このページのタイトルは→「"+document.title+"」です。");
</script><br>

結果: document.write(“このページのタイトルは→「"+document.title+"」です。”);

関連記事

Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。