関数の概要
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以降は非推奨となっているため、将来的には fgets と strip_tags の組み合わせを使うことも検討しましょう。
現状でも多くの環境で利用可能なので、HTMLタグの除去が簡単にできるこの関数をぜひ活用してください。
