PHP fgetss 函数
最后修改于 2025 年 4 月 3 日
PHP 的 fgetss
函数从文件指针读取一行,同时去除 HTML 和 PHP 标签。它对于安全地处理带有标记的文件很有用。
基本定义
fgetss
函数从一个打开的文件中读取一行,并删除任何 HTML 和 PHP 标签。它类似于 fgets
,但具有标签去除功能。
语法:fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string|false
。该函数在失败时返回 false。
fgetss 基本示例
这展示了 fgetss
用于读取和清理文件的最简单用法。
<?php declare(strict_types=1); $handle = fopen("data.txt", "r"); if ($handle) { $line = fgetss($handle); echo $line; fclose($handle); }
这从 "data.txt" 中读取第一行并删除所有 HTML/PHP 标签。读取后文件句柄会被正确关闭。始终检查 fopen 是否成功。
使用 fgetss 读取整个文件
此示例演示了逐行读取整个文件并去除标签。
<?php declare(strict_types=1); $handle = fopen("content.html", "r"); if ($handle) { while (($line = fgetss($handle)) !== false) { echo $line . "<br>"; } fclose($handle); }
这逐行读取 "content.html",从每一行中去除所有标签。循环继续,直到 fgetss 返回 false,表示文件结束或出错。
允许特定标签
第三个参数允许您指定不应去除的标签。
<?php declare(strict_types=1); $handle = fopen("formatted.html", "r"); if ($handle) { $line = fgetss($handle, 1024, "<b><i><u>"); echo $line; fclose($handle); }
在这里,我们允许 <b>、<i> 和 <u> 标签,同时去除所有其他标签。第二个参数 (1024) 指定要读取的最大行长度。
使用 fgetss 处理 CSV 文件
这展示了如何安全地处理可能包含 HTML 标记的 CSV 文件。
<?php declare(strict_types=1); $handle = fopen("data.csv", "r"); if ($handle) { while (($line = fgetss($handle)) !== false) { $fields = str_getcsv($line); print_r($fields); } fclose($handle); }
我们读取一个 CSV 文件,同时从每行中去除任何 HTML 标签,然后再进行解析。这可以防止来自恶意 CSV 内容的潜在 XSS 攻击。
比较 fgets 和 fgetss
此示例突出显示了 fgets 和 fgetss 之间的区别。
<?php declare(strict_types=1); $html = "<b>Test</b> <script>alert('xss')</script>"; file_put_contents("temp.txt", $html); $handle = fopen("temp.txt", "r"); if ($handle) { echo "fgets: " . fgets($handle) . "<br>"; rewind($handle); echo "fgetss: " . fgetss($handle); fclose($handle); unlink("temp.txt"); }
fgets 保留所有内容,包括 script 标签,而 fgetss 则将其删除。rewind 函数将文件指针移回开始位置,以便进行第二次读取。
最佳实践
- 弃用说明: 从 PHP 7.3.0 开始,fgetss 已被弃用。
- 替代方案: 对于新代码,使用 fgets 结合 strip_tags。
- 错误处理: 始终检查文件操作的错误。
- 安全性: 在允许某些标签时,请考虑上下文。
来源
本教程介绍了 PHP 的 fgetss
函数,并提供了实际示例,展示了其用于读取文件并去除 HTML/PHP 标签的用法。
作者
列出 所有 PHP 文件系统函数。