使用PHP检测EOL类型 [英] Detect EOL type using PHP
本文介绍了使用PHP检测EOL类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
参考:这是一个自我解答的问题.旨在共享知识,问答风格.
Reference: This is a self-answered question. It was meant to share the knowledge, Q&A style.
如何检测PHP中行尾字符的类型?
How do I detect the type of end of line character in PHP?
PS:我从头开始编写此代码已有太长时间了,所以我决定在SO上共享它,此外,我敢肯定有人会找到改进的方法. >
推荐答案
/**
* Detects the end-of-line character of a string.
* @param string $str The string to check.
* @param string $default Default EOL (if not detected).
* @return string The detected EOL, or default one.
*/
function detectEol($str, $default=''){
static $eols = array(
"\0x000D000A", // [UNICODE] CR+LF: CR (U+000D) followed by LF (U+000A)
"\0x000A", // [UNICODE] LF: Line Feed, U+000A
"\0x000B", // [UNICODE] VT: Vertical Tab, U+000B
"\0x000C", // [UNICODE] FF: Form Feed, U+000C
"\0x000D", // [UNICODE] CR: Carriage Return, U+000D
"\0x0085", // [UNICODE] NEL: Next Line, U+0085
"\0x2028", // [UNICODE] LS: Line Separator, U+2028
"\0x2029", // [UNICODE] PS: Paragraph Separator, U+2029
"\0x0D0A", // [ASCII] CR+LF: Windows, TOPS-10, RT-11, CP/M, MP/M, DOS, Atari TOS, OS/2, Symbian OS, Palm OS
"\0x0A0D", // [ASCII] LF+CR: BBC Acorn, RISC OS spooled text output.
"\0x0A", // [ASCII] LF: Multics, Unix, Unix-like, BeOS, Amiga, RISC OS
"\0x0D", // [ASCII] CR: Commodore 8-bit, BBC Acorn, TRS-80, Apple II, Mac OS <=v9, OS-9
"\0x1E", // [ASCII] RS: QNX (pre-POSIX)
//"\0x76", // [?????] NEWLINE: ZX80, ZX81 [DEPRECATED]
"\0x15", // [EBCDEIC] NEL: OS/390, OS/400
);
$cur_cnt = 0;
$cur_eol = $default;
foreach($eols as $eol){
if(($count = substr_count($str, $eol)) > $cur_cnt){
$cur_cnt = $count;
$cur_eol = $eol;
}
}
return $cur_eol;
}
注释:
- 需要检查编码类型
-
需要某种方式知道我们可能正在使用像ZX8x这样的奇特系统(因为ASCII x76是常规字母)@radu提出了一个很好的观点,在我看来,这不值得可以很好地处理ZX8x系统. - 是否应该将函数分为两个?
mb_detect_eol()
(多字节)和detect_eol()
- Needs to check encoding type
Needs to somehow know that we may be on an exotic system like ZX8x (since ASCII x76 is a regular letter)@radu raised a good point, in my case, it's not worth the effort to handle ZX8x systems nicely.- Should I split the function into two?
mb_detect_eol()
(multibyte) anddetect_eol()
这篇关于使用PHP检测EOL类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文