fgetss

関数の概要

fgetssは、PHPでファイルから1行ずつ読み込みながら、HTMLタグを除去して文字列を取得できる関数です。
主にHTMLやXMLのタグを取り除きたい場合に使われ、ユーザーからの入力やファイルの内容を安全に処理する場面で役立ちます。

パラメータの説明

  • resource $handle – ファイルポインタ(例: fopenで開いたファイル)を指定します。
  • int $length – (省略可能)読み込む最大バイト数を指定します。指定しない場合はデフォルトの長さ(通常は1024バイト)が利用されます。
  • string|null $allowable_tags – (省略可能)残したいHTMLタグのリストを文字列で指定します。例: '<b><i>' など。指定するとそのタグは除去されません。

戻り値

ファイルから読み込んだ1行の文字列(HTMLタグが除去された状態)を返します。
ファイルの終端に達した場合やエラーが起きた場合は false を返します。

使用例

基本的な使い方

<?php
$fp = fopen('sample.html', 'r');
if ($fp) {
    while (($line = fgetss($fp)) !== false) {
        echo $line . "<br>";
    }
    fclose($fp);
}
?>

この例では、sample.htmlを1行ずつ読み込み、それぞれの行からHTMLタグを取り除いて表示しています。

特定のタグを残して読み込む例

<?php
$fp = fopen('sample.html', 'r');
if ($fp) {
    while (($line = fgetss($fp, 1024, '<b><i>')) !== false) {
        //  タグだけは残して出力
        echo $line . "<br>";
    }
    fclose($fp);
}
?>

この例では、<b><i>タグだけは除去せずに残し、それ以外のタグを削除しています。

ファイル内容の安全な読み込み例

<?php
$fp = fopen('user_input.html', 'r');
if ($fp) {
    while (($line = fgetss($fp, 512)) !== false) {
        // 1行ずつHTMLタグを除去して安全に処理
        $safe_text = trim($line);
        if ($safe_text !== '') {
            // ここでDB保存や画面出力などを行う
            echo htmlspecialchars($safe_text, ENT_QUOTES, 'UTF-8') . "<br>";
        }
    }
    fclose($fp);
}
?>

ユーザー入力として保存されたHTMLファイルを読み込み、htmlspecialcharsでエスケープしつつタグを除去した安全な文字列を処理しています。

関連する関数

  • fgets – ファイルから1行をそのまま読み込む
  • strip_tags – 文字列のHTMLタグを除去する
  • fgetcsv – ファイルからCSV形式で1行ずつ読み込む

まとめ

fgetssはファイルから1行読み込みながらHTMLタグを除去できる便利な関数です。
HTMLタグを含むデータを安全に処理したい時に特に役立ちます。
ただしPHP7.3以降は非推奨となっているため、将来的には fgetsstrip_tags の組み合わせを使うことも検討しましょう。
現状でも多くの環境で利用可能なので、HTMLタグの除去が簡単にできるこの関数をぜひ活用してください。