When do I use PHP_EOL instead of and vice-versa ? Ajax/Jquery client problem(我什么时候使用 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 infopen(…, "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 optionalmanually:
$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 客户端问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:我什么时候使用 PHP_EOL 而不是 ,反之亦然?Aja
基础教程推荐
- Yii2 - 在运行时设置邮件传输参数 2022-01-01
- 主题化 Drupal 7 的 Ubercart “/cart"页 2021-01-01
- 使用 scandir() 在目录中查找文件夹 (PHP) 2022-01-01
- PHPUnit 的 Selenium 2 文档到底在哪里? 2022-01-01
- Web 服务器如何处理请求? 2021-01-01
- 将变量从树枝传递给 js 2022-01-01
- 如何在数学上评估像“2-1"这样的字符串?产生“1"? 2022-01-01
- php 7.4 在写入变量中的 Twig 问题 2022-01-01
- php中的PDF导出 2022-01-01
- php中的foreach复选框POST 2021-01-01
