我有一个php解析器,它通过换行符分割给定的字符串,执行以下操作:
$lines = explode(PHP_EOL,$content);
在服务器端工作时,解析器工作正常。但是,当我通过ajax通过post通过传递内容(使用jquery的$ .post方法)时,出现了问题:无法识别换行符。因此,经过将近一个小时的测试和头痛,我决定将PHP_EOL更改为“ \ n”,并且可以正常工作:
$ lines = explode(“ \ n”,$ content);
现在可以了!该死的我浪费了很多时间!有人可以正确地使用PHP_EOL和“ \ n”来解释我,这样我将来可以节省时间吗?感谢您的好心的回答;)
该常数PHP_EOL通常应用于平台特定的输出。
PHP_EOL
\n
\r\n``fopen(…, "wb")
对于 文件输入, 您应该首选\n。虽然大多数网络协议(HTTP)应该使用\r\n,但不能保证。
\r\n
\r
$lines = array_map("rtrim", explode("\n", $content));
或立即使用该file(…, FILE_IGNORE_NEW_LINES)功能,将EOL处理留给PHP或auto_detect_line_endings进行。
file(…, FILE_IGNORE_NEW_LINES)
preg_split()
$lines = preg_split("/\R/", $content);
该\R占位符检测的任何组合\r+ \n。这样将是最安全的,甚至适用于Classic MacOS ≤ 9文本文件(在实践中很少见)。
\R
≤ 9
强制性的微优化注意事项: 尽管regex有成本,但它却比PHP中的手动循环和字符串后处理通常更快。
并且由于其平台模糊性,有一些经典示例应 避免 :PHP_EOL
fsockopen()
mail()
因此,"\r\n"在不写入文件时,而是在需要 网络换行符 的特定上下文中准备数据时,请使用文字组合。
"\r\n"