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

标签 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"时向我解释一下,这样我以后可以节省时间吗?感谢您的友好回答;)

最佳答案

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

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

但是,对于文件输入,您应该更喜欢\n。虽然大多数网络协议(protocol) (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 :

  • 手动生成网络协议(protocol)负载,例如 HTTP over fsockopen() .
  • mail()和 MIME 构造(真的,无论如何你都不应该自己做乏味的事情)。
  • 文件输出,如果您希望始终只写 Unix \n 换行符,而不考虑环境。

因此,当不写入文件时使用文字 "\r\n" 组合,而是为预期网络换行符的特定上下文准备数据。

关于php - 我什么时候使用 PHP_EOL 而不是\n ,反之亦然? Ajax/Jquery 客户端问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975411/

相关文章:

php - 这个sql表结构会阻止未经授权的sql插入吗?

php - 如何使用 https 以及事情有何不同

php - MySQL 插入多个数据库 - 问题

javascript - ajax:beforeSend 在任何 ajax 调用上被触发

jquery - jQuery ajax处理204无内容

javascript - 页面 A 将值发布到页面 B,页面 B 使用 cURL 向页面 C 发送另一个帖子,并将响应返回到页面 A

javascript - 如何动态添加类似于 JavaScript 数组推送功能的 JavaScript 对象?

javascript - 脚本的名称是什么?

javascript - 输入清算问题

javascript - 通过 ajax 将数组从 PHP 移动到具有有效 JSON 格式的 JS