我有一个 php 解析器,它通过换行符分割给定的字符串,执行如下操作:
$lines = explode(PHP_EOL,$content);
解析器在服务器端工作时工作正常。然而,当我通过ajax(使用jquery的$.post方法)通过post传递内容时,出现了问题:无法识别换行符。因此,经过近一个小时的测试和头痛后,我决定将 PHP_EOL 更改为“\n”并且它起作用了:
$lines =explode("\n",$content);
现在可以了!该死的,我浪费了这么多时间!有人可以解释一下如何正确使用 PHP_EOL 和“\n”,以便我将来可以节省时间吗?感谢您的友善回答;)
常数PHP_EOL http://pear.php.net/reference/PHP_Compat-latest/__filesource/fsource_PHP_Compat__PHP_Compat-1.6.0a2CompatConstantPHP_EOL.php.html通常应该用于特定于平台的输出。
- 主要是为了文件输出 really.
- 其实文件功能已经转换了
\n
←→ \r\n
在 Windows 系统上,除非用于fopen(…, "wb")
二进制模式。
For 文件输入你应该更喜欢\n
然而。虽然大多数网络协议(HTTP)应该使用\r\n
,这是不能保证的。
-
因此最好分手\n
并删除任何可选的\r
手动:
$lines = array_map("rtrim", explode("\n", $content));
或者使用file(…, FILE_IGNORE_NEW_LINES) http://php.net/file立即运行,将 EOL 处理留给 PHP 或自动检测行结尾 http://php.net/manual/en/filesystem.configuration.php#ini.auto-detect-line-endings.
-
一个更强大和简洁的替代方案是使用preg_split() http://php.net/preg_split和一个正则表达式:
$lines = preg_split("/\R/", $content);
The \R placeholder https://nikic.github.io/2011/12/10/PCRE-and-newlines.html detects any combination of \r + \n. So would be safest, and even work for Classic MacOS ≤ 9
text files (rarely seen in practice).
Obligatory microoptimization note:
While regex has a cost, it's surprisingly often speedier than manual loops and string postprocessing in PHP.
这里有一些经典的例子,你应该avoid PHP_EOL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)