PHPプログラミング

最終更新日:
公開日:

レシピ

ファイル / ディレクトリ

HTMLタグを取り除きながらファイルのデータを取得する

ファイルから1行ずつデータを読み込むfgets関数とHTMLタグを削除するstrip_tags要素を使って、ファイルからHTMLタグを取り除きながらテキストを取得する方法を解説します。

この記事のポイント

  • fgets関数でテキストファイルのデータを1行ずつ読み込む
  • strip_tags関数でHTMLタグを取り除く
  • strip_tags関数の第2パラメータにはオプションで取り除かないHTMLタグを指定できる

目次

HTMLタグを取り除きつつデータを1行ずつ取得する

テキストから<h1><a>などのHTMLタグ(HTML要素)のテキストを取り除き、プレーンなテキストとして取得したい場合はfgets関数strip_tags要素を組み合わせて使うと実現できます。

以下の例ではPHPでindex.htmlを読み込んで、h1要素a要素以外のHTMLタグを全て削除してからvar_dump関数で出力します。

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>トップページ</title>
</head>
	<body>
		<h1>テストサイト</h1>
		<p>テストテキストテストテキストテストテキストテストテキストテストテキストテストテキストテストテキスト</p>
	</body>
</html>

PHPコード例

<?php

// ファイルへのパス
$path = './index.html';

if( is_readable($path) ) {

	// (1)ファイルを開く
	$file_handle = fopen( $path, 'r');

	// (2)ファイルから1行ずつデータを読み込む
	while( $data = fgets( $file_handle) ) {

		// (3)HTMLタグを取り除く
		$data = strip_tags( $data, ['h1','a']);

		// (4)前後の空白、改行を取り除く
		$data = preg_replace( '/\A[\p{C}\p{Z}]++|[\p{C}\p{Z}]++\z/u', '', $data);

		// (5)HTMLタグを取り除いたテキストを出力
		var_dump($data);
	}

	// (6)ファイルを閉じる
	fclose( $file_handle);

} else {
	echo 'ファイルの読み込み権限がありません。';
}

(2)のwhile文の条件式でファイルから1行だけデータを取り出すfgets関数を使って、テキストを1行ずつ読み込んでいます。
こうすることでテキストを読み込めたらwhile文の中の処理を実行し、ファイルデータを最終行まで読み込み終わってデータを取得できなかったらwhile文のループが終了します。

(3)でstrip_tags関数を使ってHTMLタグを取り除くとき、第1パラメータは対象になるテキストを渡します。
第2パラメータはオプションで任意ですが、取り除きたくないHTML要素があったら指定します。

第2パラメータの取り除かないHTMLタグの指定方法は、PHP7.4以降では上記のように配列形式で指定できます。
PHP7.3以前の環境では、以下のように文字列の形式でHTMLタグを並べて指定します。

PHPコード例

// (3)HTMLタグを取り除く
$data = strip_tags( $data, '<h1><a>');

以上、HTMLタグを取り除きながらファイルのデータを取得する方法でした。