如何移除文本文件中的空格?PHP代码实现失败求助
解决PHP移除文本文件空格失败的问题
你尝试移除文本文件中的空格但没成功,我先帮你分析代码里的问题,再给出可行的修复方案。
原文件内容
10400000 2090183800001990000000000000000000001234204321000000000EMPRESA C ECON FEDERAL 20601201405551100162204000000 RETORNO-PRODUCAO 000 10400011T0100030 20090183800001990000000000000000000001234204321000000000EMPRESA 00001622060120140000000000
期望处理后的格式
02RETORNO0000000000000000011119999990000000000000000000000000000000000000000104000000000000000201016000000000
你使用的代码
$arquivo = fopen($_FILES["Arquivo"]["tmp_name"], "r"); $arquivo = preg_replace('/\s+/', '', $arquivo); while (!feof($arquivo)) { $linhas = fread($ler,999999); $banco = substr($linhas,0,3); $lote = substr($linhas,4,7); $registro = substr($linhas,8,8); } echo "Banco: " .$banco. "<br>"; echo "Lote: " .$lote. "<br>"; echo "Registro: " .$registro. "<br>";
问题分析
你的代码有几个明显的错误,导致无法正常工作:
- 错误处理文件资源:
fopen返回的是文件资源句柄,不是文件内容字符串,直接对它调用preg_replace完全无效,这是核心问题。 - 变量名不一致:循环里用了
$ler变量,但你打开文件时赋值的是$arquivo,这会让fread找不到正确的文件资源。 - 读取逻辑冗余:用
while (!feof($arquivo))配合fread读取整个文件没必要,反而容易出现读取不完整的情况。
修复后的代码
下面是修正后的代码,能正确移除空格并提取你需要的字段:
// 先检查文件是否上传成功 if ($_FILES["Arquivo"]["error"] !== UPLOAD_ERR_OK) { echo "文件上传失败,请重试"; exit; } // 一次性读取整个文件内容到字符串 $fileContent = file_get_contents($_FILES["Arquivo"]["tmp_name"]); // 移除所有空白字符(空格、换行、制表符等) $cleanContent = preg_replace('/\s+/', '', $fileContent); // 从清理后的内容中提取字段 $banco = substr($cleanContent, 0, 3); $lote = substr($cleanContent, 4, 7); $registro = substr($cleanContent, 8, 8); // 输出结果 echo "Banco: " . $banco . "<br>"; echo "Lote: " . $lote . "<br>"; echo "Registro: " . $registro . "<br>"; // 如果需要保存清理后的文件,取消下面注释 // file_put_contents('处理后的文件.txt', $cleanContent);
关键说明
file_get_contents的优势:直接读取整个文件内容为字符串,比fopen+fread更简洁,适合处理这类需要整体操作的文本文件。- 移除空格的两种方式:
preg_replace('/\s+/', '', $fileContent):移除所有空白字符(包括多个连续空格、换行、制表符)str_replace(' ', '', $fileContent):仅移除单个空格,保留换行等其他空白(如果需要的话)
- 上传检查:增加了文件上传错误检查,避免因上传失败导致后续代码报错。
内容的提问来源于stack exchange,提问作者user4875289
相关产品推荐
相关产品推荐

