<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()的用法,並在實際開發中靈活運用。