我何时使用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内容