2012-05-04 77 views
3

我对\r\n一些问题:php和newlines:我需要知道什么?

  • 换行符是依赖于浏览器? (不是如何在浏览器中显示它们,但<textarea>如何通过http请求将它们发送到php)
  • 换行符是否依赖于系统? (其中php运行)
  • 将PHP应用一些隐式转换?
  • 将mysql应用一些隐式转换?

在此先感谢!

+0

好问题。我想补充一句:什么是典型的“陷阱”? – Smandoli

回答

6
  • 换行符依赖于浏览器吗?
    • 号使用<br>得到一个换行符在浏览器
  • 换行符是依赖于系统的? (如PHP运行)
    • 是:\n在OSX,\n在Unix/Linux,\r\n在Windows
  • 将PHP的应用一些隐式转换?
    • 没有
  • 将mysql的应用一些隐式转换?
    • 没有
+3

OSX上的'\ r'并非如此。它在OSX之前的Mac OS上是'\ r',但是OSX是基于BSD的并且使用'\ n'。流行的误解。 – DaveRandom

+0

这个矿并不是一个棘手的问题,但是:我在windows和mysql上开发我只有'\ n'而不是'\ r \ n',正如你所说的......那么这里发生了什么? (我编辑了我的问题btw) – skyline26

+0

@toPeerOrNotToPeer几乎所有基于ASCII的操作系统上的所有程序都可以透明地处理'\ n'或'\ r \ n'。对'\ r'的支持不是*宽*,但对于常用应用程序通常是可以的。一些值得注意的例外:Windoze上的notepad.exe和* nix上的一些vi/vim实现(例如较老的busybox二进制文件) – DaveRandom

0

<br>是独立于浏览器,\n太。

不知道\r

MySQL不会将它转换

0

您可能感兴趣的nl2br,这需要像你描述的新行字符,并用HTML换行符替换它们(<br />) 。

+0

作为OP的答案并不真正有效,但我很感激这个信息 - 谢谢! – Smandoli

0

系统独立的方式是使用PHP_EOL常量。

新行不依赖于浏览器,使用CSS外部标签white-space:pre必须执行nl2br() php函数将换行符转换为BR标签。

0

对我来说,一个大问题是,在单引号字符串'like\nthis'转义序列(如\n)将不会被解释。您必须使用双引号"like\nthis"才能获得实际的换行符。

+0

这就是我要说的! – Smandoli

+0

你说过,当数据来自textarea时,换行符总是用'\ r \ n'表示:你确定所有的浏览器都会像你说的那样发送数据吗? – skyline26

2

一般来说,对于浏览器\r\n是空格字符,如\t(标签)的' '(空格)。在一些标签(脚本,前等)中,它们被视为换行符号。在这种情况下,浏览器将理解任何常见的换行符(\r\r\n,\n)。

当数据来自textarea时,换行符将always表示为\r\n

php文件中的换行符不依赖于它们运行的​​系统。这取决于用于创建php文件的文件编辑器的设置。当你将一个php文件复制到另一个系统时,换行符的格式不会改变。

例如,看一下这个代码:

print_r(" 
" === "\r\n"); 

其结果将取决于用于创建该文件的编辑器的设置。它不依赖于当前的系统。

但是,如果您想要读取系统中包含的其他文件(例如文本文件),这些文件很可能会使用系统的常用换行符格式。

不,PHP和MySQL不应用隐式转换。

+0

'它的结果将取决于用于创建该文件的编辑器的设置。它不依赖于当前的系统。 - 真实的,但只能达到一个点。如果文件在某个时候以FTP ASCII模式('TYPE A')传输到另一台服务器,则行为可能会发生变化。但+1 – DaveRandom

相关问题