PHPプログラミング

レシピ

ファイル / ディレクトリ

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

fgetss関数を使って、ファイルから1行ずつHTMLタグを取り除きながらテキストを取得する方法を解説します。

この記事のポイント

  • テキスト中のHTMLタグを取り除く
  • 特定のHTMLタグのみ残すことも可能

目次

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

HTML形式のテキストをHTMLタグを除き、プレーンなテキストとして取得したい場合はfgetss関数を使います。
こちらの関数はfopen関数であらかじめファイルを開いた状態で使用する関数です。

コード例

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

// ファイルから1行取得
$data = fgetss($file_handle);

fclose($file_handle);

ファイルから1行だけデータを取り出すfgets関数と名前が非常に似ていますが、HTMLタグを取り除くこちらの関数は語尾に「s」が1つ多い点に注意してください。

fgetss関数は第1パラメータにファイルポインターリソースを指定し、第2パラメータ以降にオプションとして「読み込むバイト数」と「取り除かないHTMLタグ」を指定することができます。

コード例

fgetss( $file_handle, 4096, '<h1><p><a>');

なお、HTMLタグを取り除かない通常のデータ読み込みについては「ファイルから1行ずつデータを読み込む」をご覧ください。

使用例

ファイルの読み込みには対象ファイルが読み取りを許可している必要があります。
そこで、is_readable関数を使ってファイルを読み取れるか確認した上で、ファイルデータの読み込みを実行するコードを紹介します。

今回は次のようなHTMLファイル「index.html」を用意します。

コード例

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

このHTMLコードを読み込んでいきます。

コード例

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

// ファイルが読み込めるか確認
if( is_readable($path) ) {

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

	// ファイルから1行ずつデータを取得
	while( $data = fgetss($file_handle) ) {

		// テキストが空(改行コードのみ)じゃない場合のみ出力
		if( !empty($data) && !preg_match( '/^\n/', $data) ) {
			echo $data;
		}
	}
	
	fclose( $file_handle);

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

is_readable関数で対象ファイルのパーミッションを確認し、読み取り可能な場合のみファイルアクセスを試みます。

fopen関数で指定したパスのファイルを開き、ファイルポインターリソースを取得します。
このリソースをwhile文の中でfgetss関数に渡し、先頭から1行ずつファイルデータを取得していきます。
この時、テキスト中に含まれるHTMLタグは全て除去していきます。

続くif文ではHTMLタグを取り除いた後のデータが空じゃないか、改行コードのみになっていないかを確認します。
<html><meta>のような、HTMLタグを除去したらテキストが残らないデータを出力しないための指定です。

最後に、fclose関数でファイルを閉じて終了します。

もしh1タグpタグなど、特定のタグを除去したくない場合は次のように第3パラメータを指定してください。
第3パラメータを指定するにあたって、第2パラメータの「取得するバイト数」の指定も必要になります。

コード例

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

// ファイルが読み込めるか確認
if( is_readable($path) ) {

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

	// ファイルから1行ずつデータを取得
	while( $data = fgetss( $file_handle, 4096, '<h1><p>') ) {

		// テキストが空(改行コードのみ)じゃない場合のみ出力
		if( !empty($data) && !preg_match( '/^\n/', $data) ) {
			echo $data;
		}
	}
	
	fclose( $file_handle);

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

第2パラメータは余裕を持った十分な長さを指定しておけば大丈夫です。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。