外部サイトURLからページタイトルを取得する

この記事は2025/5/12に追加修正しました。


PHPで取得。
タイトル前後に改行タブ半角スペースが入る場合に、trimを使用してそれらを除去する。

$url = file_get_contents('URLを指定');
//タイトル取得
$pattern = '/<title>([\s\S]*?)<\/title>/i';
preg_match($pattern, $url, $match);
$title_name = trim($match[1]);
echo $title_name;

上記だと文字コードがUTF-8以外の場合文字化けしてしまうので、mb_convert_encoding()を利用して文字コードを変換する。ついでにURLの取得にcURL関数を利用するなどして改訂したコードが以下。

//cURL関数
function curl_get_contents($curl_url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
//URLをエンコードしたり
$url = htmlspecialchars('URLを指定', ENT_QUOTES, 'UTF-8');
//必要であればエンコード処理をする(Wikipediaなど)
$url = urlencode($url);
$replace = [
'%2F' => '/',
'%3A' => ':',
'%3D' => '=',
'%3F' => '?'
];
$url = strtr($url, $replace);
//タイトル取得
$get_html = curl_get_contents($url);
$pattern = '/<title>([\s\S]*?)<\/title>/i';
preg_match($pattern, $get_html, $match);
$title_name = trim($match[1]);
$title_name = mb_convert_encoding($title_name, 'UTF-8', 'ASCII, JIS, UTF-8, SJIS, EUC-JP'); //文字コード変換
echo $title_name;

CURLOPT_FOLLOWLOCATIONtrueにすることで、リクエストURLのヘッダ情報ににLocationがあれば再起的に辿っていく。

mb_convert_encoding()の第3引数にautoを指定するとうまく変換されない場合があるので、変換元の文字コードは指定する。

参考)mb_convert_encoding()でautoを使用するときの注意点 #PHP - Qiita