<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// -------------------------------------------</span></span><span>
</span><span><span class="hljs-comment">// 读取外部文件前如何用 ctype_cntrl 检查控制字符,避免 file_get_contents 出错?</span></span><span>
</span><span><span class="hljs-comment">// -------------------------------------------</span></span><span>
</span><span><span class="hljs-comment">// 在 PHP 中,file_get_contents 是读取文件内容的常用函数,但当文件包含某些控制字符时,读取过程可能出现意外情况或错误。</span></span><span>
</span><span><span class="hljs-comment">// 为了避免这种问题,可以在读取文件前,先用 ctype_cntrl 函数检查文件内容是否包含控制字符,从而提前处理或过滤,保证程序的稳定性。</span></span><span>
</span><span><span class="hljs-comment">// 什么是控制字符?</span></span><span>
</span><span><span class="hljs-comment">// 控制字符指的是 ASCII 码中非打印字符,范围通常是 0x00~0x1F 及 0x7F,这些字符在文本文件中通常不应该出现,或者是特殊格式的标志。</span></span><span>
</span><span><span class="hljs-comment">// 下面介绍如何使用 ctype_cntrl 检测并过滤控制字符,确保 file_get_contents 正常读取:</span></span><span>
</span><span><span class="hljs-comment">// 1. 读取文件原始内容</span></span><span>
</span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-string">'example.txt'</span></span><span>;
</span><span><span class="hljs-variable">$content</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$content</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"无法读取文件: <span class="hljs-subst">$filename</span></span></span><span>");
}
</span><span><span class="hljs-comment">// 2. 遍历内容检查是否存在控制字符</span></span><span>
</span><span><span class="hljs-comment">// ctype_cntrl 只能检查单个字符是否是控制字符,因此需要逐字符判断</span></span><span>
</span><span><span class="hljs-variable">$hasControlChars</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>;
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$content</span></span><span>); </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ctype_cntrl</span></span><span>(</span><span><span class="hljs-variable">$content</span></span><span>[</span><span><span class="hljs-variable">$i</span></span><span>])) {
</span><span><span class="hljs-variable">$hasControlChars</span></span><span> = </span><span><span class="hljs-literal">true</span></span><span>;
</span><span><span class="hljs-keyword">break</span></span><span>;
}
}
</span><span><span class="hljs-comment">// 3. 根据检测结果处理</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$hasControlChars</span></span><span>) {
</span><span><span class="hljs-comment">// 若有控制字符,可以选择过滤</span></span><span>
</span><span><span class="hljs-variable">$filteredContent</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$content</span></span><span>); </span><span><span class="hljs-variable">$i</span></span><span>++) {
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">ctype_cntrl</span></span><span>(</span><span><span class="hljs-variable">$content</span></span><span>[</span><span><span class="hljs-variable">$i</span></span><span>])) {
</span><span><span class="hljs-variable">$filteredContent</span></span><span> .= </span><span><span class="hljs-variable">$content</span></span><span>[</span><span><span class="hljs-variable">$i</span></span><span>];
}
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"检测到控制字符,已过滤后的内容:\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$filteredContent</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// 无控制字符,直接使用内容</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文件内容正常:\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$content</span></span><span>;
}
</span><span><span class="hljs-comment">// -------------------------------------------</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
相关标签:
file_get_contents