<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 本文与程序无关,这里仅作为演示 PHP 代码块使用</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文章即将开始,请往下看..."</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-comment"># PHP中fgetss函数怎么用?完整用法详解适合新手了解</span></span><span>
在日常 PHP 编程中,我们经常需要从文件中逐行读取内容。常用的函数有 `</span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>()`,但如果文件中包含 HTML 或 PHP 标签,有时我们并不希望这些标签直接保留。这时候,`</span><span><span class="hljs-title function_ invoke__">fgetss</span></span><span>()` 就派上用场了。
</span><span><span class="hljs-comment">## 一、fgetss函数的基本介绍</span></span><span>
`</span><span><span class="hljs-title function_ invoke__">fgetss</span></span><span>()` 是 PHP 提供的一个文件读取函数,与 `</span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>()` 类似,区别在于它会在读取时**自动去除 HTML 和 PHP 标签**,从而避免一些潜在的安全问题。它常被用于处理用户上传的文本文件,或者在读取带有 HTML 标签的文件时,只保留纯文本内容。
**函数原型:**
```php
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">fgetss</span></span><span> ( resource </span><span><span class="hljs-variable">$handle</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> [, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$allowable_tags</span></span><span> ] )
</span></span>
:通过 fopen() 打开的文件句柄。
$length:每次读取的最大字节数。
$allowable_tags(可选):允许保留的 HTML 标签。
fgets():完整读取文件中的一行,包括 HTML 标签。
fgetss():读取时会过滤掉 HTML 和 PHP 标签,只保留纯文本(除非通过参数允许部分标签)。
举个例子:
<span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"test.txt"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>); </span><span><span class="hljs-comment">// 会输出带HTML标签的完整内容</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">fgetss</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>); </span><span><span class="hljs-comment">// 会自动去掉HTML标签</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span></span>
假设 test.txt 文件内容为:
<span><span><span class="hljs-tag"><<span class="hljs-name">b</span></span></span><span>>这是加粗的文字</span><span><span class="hljs-tag"></<span class="hljs-name">b</span></span></span><span>>
</span></span>
输出结果为:
<span><span>这是加粗的文字
</span></span>
如果我们希望保留部分 HTML 标签,可以通过第三个参数实现。
示例:
<span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"test.txt"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">fgetss</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>, </span><span><span class="hljs-string">"<b><i>"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span></span>
假设 test.txt 内容为:
<span><span><span class="hljs-tag"><<span class="hljs-name">b</span></span></span><span>>加粗</span><span><span class="hljs-tag"></<span class="hljs-name">b</span></span></span><span>>和</span><span><span class="hljs-tag"><<span class="hljs-name">i</span></span></span><span>>斜体</span><span><span class="hljs-tag"></<span class="hljs-name">i</span></span></span><span>>以及</span><span><span class="hljs-tag"><<span class="hljs-name">u</span></span></span><span>>下划线</span><span><span class="hljs-tag"></<span class="hljs-name">u</span></span></span><span>>
</span></span>
输出结果为:
<span><span><span class="hljs-tag"><<span class="hljs-name">b</span></span></span><span>>加粗</span><span><span class="hljs-tag"></<span class="hljs-name">b</span></span></span><span>>和</span><span><span class="hljs-tag"><<span class="hljs-name">i</span></span></span><span>>斜体</span><span><span class="hljs-tag"></<span class="hljs-name">i</span></span></span><span>>以及下划线
</span></span>
可以看到 <b> 和 <i> 标签被保留,而 <u> 被去掉。
编码问题:如果文件中有中文,注意使用合适的编码格式(如 UTF-8)。
性能问题:fgetss() 每次调用会进行标签过滤,如果处理大量文件,性能可能会略低于 fgets()。
PHP版本:需要注意,PHP 7.3 之后 fgetss() 已经被移除,不再推荐使用。替代方案是使用 fgets() 配合 strip_tags():
<span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strip_tags</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-string">"<b><i>"</span></span><span>);
</span></span>
fgetss() 是一个便捷的文件读取函数,可以在读取过程中自动去掉 HTML 和 PHP 标签。
对于需要保留部分标签的情况,可以通过第三个参数指定。
在新版本 PHP 中建议使用 fgets() + strip_tags() 组合来实现相同功能。
通过本文,相信新手已经能够理解 fgetss() 的用法,并在实际开发中灵活运用。