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

时间:2011-02-12 00:24:37

标签: php jquery ajax post line-breaks

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

$lines = explode(PHP_EOL,$content);

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

  

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

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

5 个答案:

答案 0 :(得分:41)

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

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

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

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

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

    或立即使用file(…, FILE_IGNORE_NEW_LINES)功能,将EOL处理留给PHP或auto_detect_line_endings

  • 使用preg_split()和正则表达式的更强大和更简洁的选择:

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

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

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

还有一些经典示例,您应该 避免 PHP_EOL 由于其platform-ambiguity:< / p>

  • 手动生成网络协议有效负载,例如HTTP fsockopen()
  • 对于mail()和MIME构造(实际上,你不应该单调乏味地做自己)。
  • 文件输出, ,如果 ,您希望始终只编写Unix \n换行符,无论环境如何。

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

答案 1 :(得分:9)

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

PHP_EOL

它会产生特定于您平台的换行符。

答案 2 :(得分:5)

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:-1)

使用PHP_EOL的恕我直言

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

var eol = '<?php echo str_replace(array("\n","\r"),array('\\n','\\r'),PHP_EOL) ?>';

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