PHPfgetss()函数

重要提醒

fgetss() 函数已在 PHP 7.3.0 中废弃,并在 PHP 8.0.0 中移除。 本页面内容仅供参考,新代码应使用其他方法替代。

fgetss() 函数是PHP中用于从打开的文件中读取一行并剥离HTML、PHP和NULL字符标签的函数。它在旧版本中用于安全地读取可能包含HTML标签的文件内容。

语法 (已废弃)

string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] )

参数说明

参数 描述 是否必需
handle 文件指针,由 fopen() 创建
length 可选。要读取的最大字节数
allowable_tags 可选。指定允许保留的HTML标签

替代方案

由于 fgetss() 已废弃,以下是推荐的替代方法:

方法1:使用 strip_tags() 替代
<?php
// 旧代码 (PHP 7.3以下)
$file = fopen("data.txt", "r");
$line = fgetss($file); // 已废弃

// 新代码 (PHP 7.3+)
$file = fopen("data.txt", "r");
$line = fgets($file);
$clean_line = strip_tags($line); // 使用strip_tags()替代

fclose($file);
?>
方法2:完整替代示例
<?php
function safeReadLine($file_handle, $length = 1024, $allowable_tags = '') {
    $line = fgets($file_handle, $length);
    if ($line === false) {
        return false;
    }
    return strip_tags($line, $allowable_tags);
}

// 使用示例
$file = fopen("data.txt", "r");
while (($line = safeReadLine($file)) !== false) {
    echo $line . "<br>";
}
fclose($file);
?>
方法3:保留特定标签
<?php
// 旧代码:允许<p>和<br>标签
$line = fgetss($file, 1024, '<p><br>');

// 新代码:使用strip_tags()的第二个参数
$line = fgets($file);
$clean_line = strip_tags($line, '<p><br>');
?>

历史版本示例

以下示例仅用于历史参考,不要在PHP 7.3+ 版本中使用:

<?php
// PHP 7.2及以下版本的使用方式
$file = fopen("data.txt", "r");

// 基本用法 - 移除所有HTML标签
while ($line = fgetss($file)) {
    echo $line . "<br>";
}

// 允许特定标签
rewind($file);
while ($line = fgetss($file, 1024, '<b><i><u>')) {
    echo $line . "<br>";
}

fclose($file);
?>

与其他函数的比较

函数 描述 状态
fgetss() 读取一行并剥离HTML/PHP标签 已移除 (PHP 8.0+)
fgets() 读取一行(包含HTML标签) 可用
strip_tags() 从字符串中剥离HTML/PHP标签 可用
htmlspecialchars() 将特殊字符转换为HTML实体 可用

迁移建议

迁移到新版本的步骤
  1. 将所有 fgetss() 调用替换为 fgets()
  2. 在读取后添加 strip_tags()htmlspecialchars()
  3. 如果需要保留特定标签,使用 strip_tags($string, $allowable_tags)
  4. 测试所有文件读取功能,确保过滤逻辑正确
完整迁移示例
<?php
// 旧版本代码
function readSecureFile($filename) {
    $file = fopen($filename, "r");
    $content = [];
    while ($line = fgetss($file, 1024, '<br><strong>')) {
        $content[] = $line;
    }
    fclose($file);
    return $content;
}

// 新版本代码
function readSecureFileNew($filename) {
    $file = fopen($filename, "r");
    $content = [];
    while ($line = fgets($file)) {
        // 使用strip_tags替代fgetss
        $clean_line = strip_tags($line, '<br><strong>');
        $content[] = $clean_line;
    }
    fclose($file);
    return $content;
}
?>
最佳实践

在新的PHP项目中,建议始终使用 fgets() 配合 htmlspecialchars()strip_tags() 来确保安全性,并明确指定所需的过滤逻辑。