UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#104 fgetss()関数を使ってファイルから特殊な文字列を除去

記入日:2023-04-22 編集日:2023-04-22

fgetss()関数を使ってファイルから特殊な文字列を除去する方法を解説してみようと思います。

この記事を読むと(約5分)
fgetss()関数を使ってファイルから特殊な文字列を除去する方法がイメージできます。

ファイルから特殊な文字列を除去

fgetss()関数は、ファイルから1行読み込み、HTMLタグやPHPタグなどの特殊な文字列を除去するためのPHPの組み込み関数です。この関数は、入力ファイルからのセキュリティ上の脅威を軽減するために使用されることがあります。

fgetss()関数は、次の構文を持ちます。

string fgetss(resource $handle, int $length = 0, string $allowable_tags = null): string|false

$handleは、ファイルポインタを指定するためのパラメータであり、fopen()関数でファイルを開いた後に使用されます。$lengthは、読み込む最大文字数を指定するためのパラメータであり、省略可能です。$allowable_tagsは、除去しないHTMLタグを指定するためのパラメータであり、省略可能です。

関数は、1行のテキストを文字列で返します。もしファイルの終わりに達した場合は false を返します。

注意点として、fgetss()関数は、HTMLタグを削除する場合でも、完全に信頼できるわけではありません。攻撃者は、HTMLタグを使用して、クロスサイトスクリプティング(XSS)攻撃などの脅威を仕掛けることができます。そのため、入力値の検証やサニタイズを適切に行うことが重要です。また、strip_tags()関数を使用することで、より安全にHTMLタグを削除することができます。

以下はfgetss()関数の具体例です。
例えば、以下のようなHTMLファイルexample.htmlがあるとします。

<!DOCTYPE html>
<html>
<head>
	<title>Example</title>
</head>
<body>
	<h1>Hello, world!</h1>
	<p>This is an <em>example</em> HTML file.</p>
	<?php echo "This is a PHP tag." ?>
</body>
</html>

このファイルからfgetss()関数を使用して1行ずつ読み込み、HTMLタグとPHPタグを除去して表示するには、以下のようにコードを書くことができます。

$file = fopen("example.html", "r");
while (!feof($file)) {
    $line = fgetss($file);
    echo $line . "
"; } fclose($file);

このコードを実行すると、次のような出力が得られます。

Hello, world!

This is an example HTML file.

このように、HTMLタグとPHPタグが除去された1行ずつのテキストが表示されます。注意点として、fgetss()関数は、<em>タグ内のテキストは除去しません。これは、<em>タグが$allowable_tagsパラメータで指定されていないためです。例えば、$allowable_tags = "<em>"と指定することで、<em>タグ内のテキストを除去することができます。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。