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 文件系统函数。