我有一个php解析器,它通过换行符拆分给定的字符串,执行如下操作:
$lines = explode(PHP_EOL,$content);
解析器在服务器端工作时工作正常。但是,当我通过ajax(使用jquery的$ .post方法)通过post传递内容时,问题就出现了:不会识别换行符。经过近一个小时的测试和头痛之后,我决定将PHP_EOL改为“\ n”并且有效:
$ lines = explode(“\ n”,$ content);
现在它有效!该死的我失去了这么多时间!当有人正确地使用PHP_EOL和“\ n”时,有人可以解释一下,这样我以后可以节省时间吗?感谢您的回答;)
答案 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>
fsockopen()
。mail()
和MIME构造(实际上,你不应该单调乏味地做自己)。 \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内容