是新行= \n OR\r \n?

Rya*_*yan 34 php string

我见过许多开发人员使用不同的方法用新行分割字符串,但我很困惑哪个是正确的:\r\n或者\n只是?

ick*_*fay 72

\n 用于Unix系统(包括Linux和OSX).

\r\n 主要用于Windows.

\r 用于非常老的Mac.

PHP_EOL 使用常量而不是这些字符来实现平台之间的可移植性.

  • 从历史的角度来看,从打印机只打印字符(如打字机)的日子开始.\ r \n是回车(字面意思是,将打印头移回到行的开头),\n是换行符(向上移动纸张).更多信息请访问:http://en.wikipedia.org/wiki/Carriage_return (8认同)
  • 需要明确的是:这里真正的旧Mac是指为OS 9编写的程序,该程序在2002年被宣布为死机. (4认同)
  • 关于历史方面的进一步问题,为了打印"完整"换行符有两个字符的原因是因为打印头需要时间才能返回到行的开头,所以只是让另一个字符没有需要打印头本身做任何事情,允许整个系统有效地工作,而不必担心客户端必须等待,然后在发送换行符后重新同步. (3认同)

kro*_*owe 24

给出的答案远未完成.事实上,它远未完成,它倾向于引导读者相信这个答案是依赖于操作系统的,而不是.它也不是依赖于编程语言的东西(正如一些评论家所建议的那样).我将添加更多信息,以便更清楚.首先,让我们给出当前新行变化的列表(例如,自1999年以来它们是什么):

  • \r\n 仅用于Windows记事本,DOS命令行,大多数Windows API和某些(较旧的)Windows应用程序.
  • \n 用于所有其他系统,应用程序和Internet.

您会注意到我将大多数Windows应用程序放在\n可能稍有争议的组中,但在您不同意此声明之前,请抓取一个UNIX格式的文本文件并在您选择的10个Web友好的Windows应用程序中尝试(这些都不是我在上面的例外情况中列出了.他们中有多少人处理得很好?您会发现它们(实际上)都实现了对行结尾的自动检测或只是使用,\n因为在Windows可能使用时\r\n,Internet会使用\n.因此,\n如果您希望输出对Internet友好,则最好单独使用应用程序.

PHP还定义了一个名为的换行符PHP_EOL.此常量设置为运行PHP的计算机的特定于操作系统的换行符(\r\n对于Windows和\n其他所有内容).此常量对于网页不是很有用,应该避免HTML输出或将大多数文本写入文件.当我们从PHP应用程序转移到命令行输出时,它变得非常有用,因为它将允许您的应用程序在所有支持的操作系统中以一致的方式输出到终端窗口.

如果你希望你的PHP应用程序从它们被放置在,两个最重要的事情要记住任何服务器的工作,你应该永远都只是用\n,除非它是终端输出(在这种情况下,你使用PHP_EOL)你也应该始终使用/您的路径分隔符(不是\).

更长的解释:

无论默认的OS行结束样式如何,应用程序都可以选择使用它喜欢的任何行结尾.如果我希望我的文本编辑器每次遇到一个新行时都会打印一个换行符,而不是使用\n表示换行符的句号,因为我正在解释文本,无论如何都要显示它.IOW,我正在摆弄测量每个字符的宽度,因此它知道在哪里显示下一个字符,所以添加一个语句非常简单,如果当前字符是句点然后执行换行操作(或者如果是一\n则显示一个周期).

除了null终止符之外,没有字符代码是神圣的,当你编写文本编辑器或查看器时,你负责将文件中的位转换为屏幕上的字形(或回车).区分控制字符(例如换行符与其他字符)的唯一区别是大多数字体集不包含它们(意味着它们没有可用的可视表示).

话虽这么说,如果你在更高级别的抽象工作,那么你可能没有自己的文本框控件.如果是这种情况,那么你就会遇到控件可用的任何行结束.即使在这种情况下,自动检测任何字符串的行结束样式并在将文本加载到控件之前进行转换然后在从该控件读取时撤消它也是一件简单的事情.这意味着,如果您是桌面应用程序开发人员并且您的应用程序无法识别\n为换行符,那么它不是一个非常友好的应用程序,您真的没有任何借口,因为它并不难以正确的方式.这也意味着写记事本的任何人都应该为自己感到羞耻,因为它真的很容易做得更好,所以很多人每天都在使用它.

  • 您对“\n 用于所有其他系统、应用程序和 Internet”这句话已经离题了。许多 Internet 协议要求 \r\n 行结尾 Http 标头需要以 \r\n 终止并且标头和消息以 \r\n 分隔 (3认同)
  • 另请参见HTTP(7230),SMTP(RFC5321),POP3(RFC1939)和电子邮件(RFC2822),其状态必须为\ r \ n行尾 (2认同)

gah*_*ooa 5

如果您使用 PHP 进行编程,则按\n和 然后trim()将每一行分割(假设您不关心空格)会很有用,这样无论如何都会给您一个“干净”的行。

foreach($line in explode("\n", $data))
{
    $line = trim($line);
    ...
}
Run Code Online (Sandbox Code Playgroud)