当前位置: 首页 > 面试题库 >

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

南宫森
2023-03-14
问题内容

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

$lines = explode(PHP_EOL,$content);

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

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

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


问题答案:

该常数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"在不写入文件时,而是在需要 网络换行符 的特定上下文中准备数据时,请使用文字组合。



 类似资料:
  • 我是测试新手,我遇到过TDD和BDD方法。但我对此感到困惑。我不知道什么时候使用TDD代替BDD是更好的选择,反之亦然。我看到了一些文章,但它们更多的是关于差异的... 我有一些提示,但不确定它们的有效性。 场景2:+gived,when,then 情景三:... 2)但是如果我想要实现一些GUI,那么在我看来BDD是更好的选择...因为它是一个用户可以控制的东西(点击按钮,填充字段,等等)...

  • 问题内容: 似乎它们都可以让您检索最小值(这是我的Prim算法所需的),并迫使我删除并重新插入密钥以更新其值。不仅对于本示例,而且一般来说,使用一个相对于另一个有任何优势吗? 问题答案: 一般来说,使用堆仅跟踪最小元素的工作量较小。 一棵树更有组织性,并且需要更多计算才能维护该组织。但是,如果您需要访问 任何 键,而不仅仅是最小键,那么堆就不够了,并且树的额外开销是合理的。

  • 问题内容: 什么时候使用是个好主意? 我有时会在PHP的代码示例中看到这一点。这样可以处理DOS / Mac / Unix终端问题吗? 问题答案: 是的,表面上用来以跨平台兼容的方式查找换行符,因此它可以处理DOS / Unix问题。 请注意,PHP_EOL表示 _当前_系统的结束符。例如,在类似Unix的系统上执行时,它将找不到Windows终端行。

  • 问题内容: 如数组和字典 实例方法中所述: 以与for-in循环相同的顺序在 序列 中的每个元素上调用给定的闭包。 尽管如此,改编自序列概述: 序列是您可以一次浏览一个值的列表。遍历序列元素 的最常见方法 是使用 for-in循环 。 或表示该迭代序列: 或(数组): 将给出相同的输出。 为什么还要存在?即使用它而不是循环有什么好处?从性能角度来看,它们是相同的吗? 作为一个假设,它可能是语法糖,

  • 因此用户可以创建包含列和行的表。我认为MongoDB或CouchDB对此会有好处,但我不确定是哪一个。我也需要高效的分页以及。

  • 问题内容: Android有自己的HashMap实现,它不使用自动装箱,并且在某种程度上可以提高性能(CPU或RAM)? https://developer.android.com/reference/android/support/v4/util/ArrayMap.html 从我在这里所读的内容中,如果我的HashMaps的大小低于数百条记录并且将被频繁写入,则应将我的HashMap对象替换为A