行结束符\r\n和\n坑人一例

起因,我想利用一个记录了mac地址列表的文本文件,产生类似与map的格式。mac.txt 内容如下(为了方便叙述,只保留了5行):

98EECB8C6766

98EECB89E357

98EECB8C7879

98EECB8C6A10

98EECB8C6828

处理脚本 format.php 如下:

php 复制代码
<?php

$content = file_get_contents('mac.txt');
$lines = explode("\n", $content);
var_dump($lines);

for ($i = 0; $i < count($lines); $i++) {
    echo '"'.$lines[$i].'":'.($i+1).",\n";
}

结果,输出的内容有点怪异:

bash 复制代码
array(5) {
  [0]=>
" string(13) "98EECB8C6766
  [1]=>
" string(13) "98EECB89E357
  [2]=>
" string(13) "98EECB8C7879
  [3]=>
" string(13) "98EECB8C6A10
  [4]=>
  string(12) "98EECB8C6828"
}
":1,ECB8C6766
":2,ECB89E357
":3,ECB8C7879
":4,ECB8C6A10
"98EECB8C6828":5,

当时心急,调试了半天不知道问题在哪里。怪也怪我看看内容简单,当时心又急,就想粗暴使用 file_get_contents 和 explode 解决问题,没有耐心分析原因,只知道瞎改输出格式,就没有找到问题。

问题就出在你没法知道 mac.txt 的行结束符使用的是 \n 还是 \r\n。正好 mac.txt 是 Windows 下拷贝终端输出到记事本生成的,而上述代码用 \n 来分割内容,从而数组每个元素是字符串 xxxx\r,在输出时,因为\r,后续的输出内容会覆盖前面的输出内容。

知道了原因自然好办了,给 echo 语句加 trim 就行:

php 复制代码
echo '"'.trim($lines[$i]).'":'.($i+1).",\n";
相关推荐
luck_0074 分钟前
PhpSpreadsheet 导出excel 找不到setCellValueByColumnAndRow
php
生椰拿铁You30 分钟前
解决Apache/2.4.39 (Win64) PHP/7.2.18 Server at localhost Port 80问题
php
索然无味io6 小时前
跨站请求伪造之基本介绍
前端·笔记·学习·web安全·网络安全·php
伟大无须多言6 小时前
企业资源规划系统(ERP)服务器上线项目实施指南
开发语言·php
网络安全(king)6 小时前
网络安全设备
网络·web安全·php
蜗牛hb11 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
手可摘星河11 小时前
php中 cli和cgi的区别
开发语言·php
EasyDSS12 小时前
国标GB28181-2022平台EasyGBS:安防监控中P2P的穿透方法
网络协议·php·音视频·p2p
liuyunshengsir14 小时前
Squid代理服务器的安装使用
开发语言·php
007php0071 天前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程