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

时间:2011-01-28 03:39:02

标签: php string

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

4 个答案:

答案 0 :(得分:67)

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

\r\n主要用于Windows。

\r用于非常老的Mac。

使用

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

答案 1 :(得分:23)

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

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

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

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

如果您希望PHP应用程序可以从任何服务器上运行,那么最重要的两件事是您应该始终只使用\n,除非它是终端输出(在这种情况下,您使用PHP_EOL) 您还应始终使用/作为路径分隔符(而不是\)。

更长的解释:

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

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

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

答案 2 :(得分:4)

如果您使用PHP进行编程,那么按行\n然后trim()分割每行(如果您不关心空格)来为您提供“干净”的行是很有用的

foreach($line in explode("\n", $data))
{
    $line = trim($line);
    ...
}

答案 3 :(得分:1)

对于php,\ n应该适合你!

http://php.net/manual/en/language.types.string.php