ZetCode

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 用于读取和清理文件的最简单用法。

basic_fgetss.php
<?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 读取整个文件

此示例演示了逐行读取整个文件并去除标签。

read_entire_file.php
<?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,表示文件结束或出错。

允许特定标签

第三个参数允许您指定不应去除的标签。

allow_tags.php
<?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 文件。

process_csv.php
<?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 之间的区别。

compare_functions.php
<?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 fgetss 文档

本教程介绍了 PHP 的 fgetss 函数,并提供了实际示例,展示了其用于读取文件并去除 HTML/PHP 标签的用法。

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。到目前为止,我撰写了超过 1,400 篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 PHP 文件系统函数