我什么时候使用 PHP_EOL 而不是 ,反之亦然?Ajax/Jquery 客户端问题 [英] When do I use PHP_EOL instead of and vice-versa ? Ajax/Jquery client problem

查看:23
本文介绍了我什么时候使用 PHP_EOL 而不是 ,反之亦然?Ajax/Jquery 客户端问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a php parser that split a given string by line-breaks, doing something like this:

$lines = explode(PHP_EOL,$content);

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

The parser works fine when working on server side. However, when I pass the content via post by ajax (using jquery's $.post method) the problem arises: line breaks are not recogniezed. So after almost an hour of tests and head-aches I decided to changed PHP_EOL by " " and it worked:

$lines = expand(" ",$content);

$lines = explode(" ",$content);

现在可以了!该死的我浪费了太多时间!有人可以解释一下什么时候正确使用 PHP_EOL 和 " " 以便我将来可以节省时间吗?感谢您的回答;)

Now it works! Damn it I lost so much time! Could somebody explain me when use PHP_EOL and " " properly, so I can save time in the future? Appreciate your kind answers ;)

推荐答案

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

The constant PHP_EOL should generally be used for platform-specific output.

  • 主要用于文件输出.
  • 实际上文件函数已经在 Windows 系统上转换了 ←→ 除非在 fopen(..., "wb") 中使用代码>二进制模式.
  • Mostly for file output really.
  • Actually the file functions already transform ←→ on Windows systems unless used in fopen(…, "wb") binary mode.

对于文件输入,你应该更喜欢 .虽然大多数网络协议 (HTTP) 都应该使用 ,但这并不能保证.

For file input you should prefer however. While most network protocols (HTTP) are supposed to use , that's not guaranteed.

  • 因此最好在 上分解并手动删除任何可选的 :

  • Therefore it's best to break up on and remove any optional manually:

$lines = array_map("rtrim", explode("
", $content));

或者立即使用file(..., FILE_IGNORE_NEW_LINES) 函数,离开对 PHP 或 auto_detect_line_endings 的 EOL 处理.

Or use the file(…, FILE_IGNORE_NEW_LINES) function right away, to leave EOL handling to PHP or auto_detect_line_endings.

更强大和更简洁的替代方法是使用 preg_split() 和正则表达式:

A more robust and terser alternative is using preg_split() and a regexp:

$lines = preg_split("/R/", $content);

R 占位符 检测 + 的任意组合.所以最安全,甚至适用于经典 MacOS ≤ 9 文本文件(实践中很少见).

The R placeholder detects any combination of + . So would be safest, and even work for Classic MacOS ≤ 9 text files (rarely seen in practice).

强制性微优化注意事项:
虽然正则表达式有成本,但令人惊讶的是,它通常比 PHP 中的手动循环和字符串后处理更快.

还有一些经典示例,您应该避免 PHP_EOL,因为它的平台歧义:

And there are a few classic examples where you should avoid PHP_EOL due to its platform-ambiguity:

  • 手动生成网络协议负载,例如基于 fsockopen() 的 HTTP.
  • 对于 mail() 和 MIME 构造(实际上,您不应该反正自己做很乏味).
  • 文件输出,如果你想一致只写 Unix 换行符,而不管环境如何.
  • Manual generation of network protocol payloads, such as HTTP over fsockopen().
  • For mail() and MIME construction (which really, you shouldn't do tediously yourself anyway).
  • File output, if you want to consistently write just Unix newlines regardless of environment.

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

So use a literal " " combination when not writing to files, but preparing data for a specific context that expects network linebreaks.

这篇关于我什么时候使用 PHP_EOL 而不是 ,反之亦然?Ajax/Jquery 客户端问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆