我何时使用PHP_EOL而不是\ n,反之亦然? Ajax / Jquery客户端问题

我有一个php解析器,它通过换行符拆分给定的字符串,执行如下操作:

$lines = explode(PHP_EOL,$content); 

在服务器端工作时,解析器工作正常。 但是,当我通过ajax(使用jquery的$ .post方法)通过post传递内容时,会出现问题:不会识别换行符。 经过近一个小时的测试和头痛后,我决定用“\ n”更改PHP_EOL并且它有效:

$ lines = explode(“\ n”,$ content);

现在它有效! 该死的我失去了这么多时间! 当有人正确使用PHP_EOL和“\ n”时,有人可以解释一下,这样我以后可以节省时间吗? 欣赏你的答案;)

常量PHP_EOL通常应该用于特定于平台的输出。

  • 主要用于文件输出
  • 实际上,除非在fopen(…, "wb")二进制模式中使用,否则文件函数已在Windows系统上转换\n ←→ \r\n

对于文件输入,您应该更喜欢\n 。 虽然大多数网络协议(HTTP)都应该使用\r\n ,但这并不能保证。

  • 因此,最好分解\n并手动删除任何可选的\r \n

     $lines = array_map("rtrim", explode("\n", $content)); 

    或者立即使用file(…, FILE_IGNORE_NEW_LINES)函数,将EOL处理留给PHP或auto_detect_line_endings 。

  • 使用preg_split()和regexp是一个更强大和更简洁的选择:

     $lines = preg_split("/\R/", $content); 

    \R占位符检测\ r + \ n的任意组合。 所以最安全,甚至适用于ClassicMacOS≤9文本文件(在实践中很少见)。

    强制性微观优化说明:
    虽然正则表达式有成本,但令人惊讶的是,它通常比PHP中的手动循环和字符串后处理更快。

还有一些经典示例,由于其平台模糊性 ,您应该避免使用 PHP_EOL

  • 手动生成网络协议有效负载,例如HTTP over fsockopen()
  • 对于mail()和MIME构造(实际上,你不应该单调乏味地做自己)。
  • 文件输出, 如果你想在不考虑环境的情况下一致地编写Unix \n换行符。

因此,在不写入文件时使用文字"\r\n"组合,但为期望网络换行符的特定上下文准备数据。

编写日志文件等输出时应使用PHP_EOL

它将生成特定于您的平台的换行符。

PHP_EOL是一个常量,包含服务器平台使用的换行符。 在Windows的情况下,它是\r\n 。 在* nix上,它是\n 。 你显然有一个Windows服务器。

如果你在* nix服务器上,那么这个改变就不会修复它,因为它会是\n 。 如果要将数据发送到客户端(即浏览器),则应使用\r\n确保识别换行符。

PHP_EOL是PHP运行的服务器使用的行结尾。 用户提交的内容可能以他们使用的任何格式结束。 但是,只使用file()函数,而不是在换行符上爆炸,它完全符合您的要求。

恕我直言,使用PHP_EOL是优选的

为了确保PHP和JS处理换行符之间的一致性,您可能希望使用PHP_EOL在JS中定义行尾变量

 var eol = ''; 

之后,使用eol分割提交的textarea内容