【问题标题】:php and newlines: what I need to know?php 和换行符:我需要知道什么?
【发布时间】:2012-05-14 03:19:44
【问题描述】:

我有一些关于\r\n的问题:

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

提前致谢!

【问题讨论】:

  • 好问题。我要补充:什么是典型的“陷阱”?

标签: php mysql cross-browser cross-platform newline


【解决方案1】:
  • 换行符是否依赖于浏览器?
    • 没有。使用 <br> 在浏览器中获取换行符
  • 换行符是系统相关的吗? (php运行的地方)
    • 是:\n 在 OSX 上,\n 在 Unix/Linux 上,\r\n 在 Windows 上
  • php 会应用一些隐式转换吗?
    • 没有
  • mysql 会应用一些隐式转换吗?
    • 没有

【讨论】:

  • \r 在 OSX 上并非如此。在 OSX 之前的 Mac OS 上它是 \r,但 OSX 基于 BSD 并使用 \n。流行的误解。
  • 我的问题不是一个棘手的问题,但是:我正在 Windows 和 mysql 上开发我只有\n 而不是你说的\r\n...所以这里发生了什么? (顺便说一句,我已经编辑了我的问题)
  • @toPeerOrNotToPeer 几乎所有基于 ASCII 的操作系统上的所有程序都可以透明地处理\n\r\n。对\r 的支持不是as 广泛的,但通常可以用于常用应用程序。几个值得注意的例外:Windoze 上的 notepad.exe,以及 *nix 上的一些 vi/vim 实现(例如旧的 busybox 二进制文件)
  • @toPeerOrNotToPeer Further reading
【解决方案2】:

通常,对于浏览器,\r\n 是空白字符,例如 ' '(空白)或 \t(制表符)。在某些标签(脚本、pre 等)中,它们被视为换行符。在这种情况下,浏览器将理解任何常见的换行符序列(\r\r\n\n)。

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

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

例如看这段代码:

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

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

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

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

【讨论】:

  • Its result will depend on settings of the editor used for creating this file. It doesn't depend on current system. - 是的,但只是在一定程度上。如果文件在某个时候以 FTP ASCII 模式 (TYPE A) 传输到另一台服务器,则行为可能会改变。但是+1
【解决方案3】:

系统无关的方式是使用 PHP_EOL 常量。

换行不依赖于浏览器,外部带有 CSS white-space:pre 的标签必须执行 nl2br() php 函数才能将换行转换为 BR 标签。

【讨论】:

    【解决方案4】:

    您可能对nl2br 感兴趣,它采用您所描述的换行符并将它们替换为 HTML 换行符 (<br />)。

    【讨论】:

    • 作为对 OP 的回答并不真正有效,但我很感谢您提供的信息 - 谢谢!
    【解决方案5】:

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

    【讨论】:

    • 这就是我要说的!
    • 您说当数据来自 textarea 时,换行符将始终用\r\n 表示:您确定所有浏览器都会按照您的说法发送数据吗?
    【解决方案6】:

    <br> 独立于浏览器,\n 也应该如此。

    不知道\r

    MySQL 不会转换它

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 2010-09-16
      • 2016-07-11
      相关资源
      最近更新 更多