小编典典

什么时候使用PHP_EOL代替\ n,反之亦然?Ajax / Jquery客户端问题

ajax

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

$lines = explode(PHP_EOL,$content);

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

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

现在可以了!该死的我浪费了很多时间!有人可以正确地使用PHP_EOL和“ \ n”来解释我,这样我将来可以节省时间吗?感谢您的好心的回答;)


阅读 372

收藏
2020-07-26

共1个答案

小编典典

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

  • 实际上主要用于 文件输出
  • 实际上,除非在二进制模式下使用,否则文件功能已经在Windows系统上转换了\n←→ 。\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占位符检测的任何组合\r+ \n。这样将是最安全的,甚至适用于Classic MacOS ≤ 9文本文件(在实践中很少见)。

强制性的微优化注意事项: 尽管regex有成本,但它却比PHP中的手动循环和字符串后处理通常更快。

并且由于其平台模糊性,有一些经典示例应 避免
PHP_EOL

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

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

2020-07-26