Skip to content

Instantly share code, notes, and snippets.

@Werninator
Last active October 3, 2020 17:34
Show Gist options
  • Save Werninator/71b2f7ac723ffb841eab8ac760ef528a to your computer and use it in GitHub Desktop.
Save Werninator/71b2f7ac723ffb841eab8ac760ef528a to your computer and use it in GitHub Desktop.
[php] detect EOL type from string
<?php
/**
* Detects the end-of-line character of a string.
* modified version from https://stackoverflow.com/questions/11066857/detect-eol-type-using-php
* @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 = PHP_EOL) {
static $eols = [
"\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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment