У меня есть парсер php, который разбивает заданную строку на разрывы строк, делая что-то вроде этого:
$lines = explode(PHP_EOL,$content);
Парсер отлично работает при работе на стороне сервера. Однако, когда я передаю содержимое через пост ajax (используя метод $ .post jquery), возникает проблема: разрывы строк не распознаются. Поэтому, после почти часа тестов и головокружения, я решил изменить PHP_EOL на «\ n», и он сработал:
$ lines = explode ("\ n", $ content);
Теперь это работает! Черт возьми, я потерял столько времени! Может ли кто-нибудь объяснить мне, когда используете PHP_EOL и «\ n» правильно, поэтому я могу сэкономить время в будущем? Цените свои добрые ответы;)
Постоянный PHP_EOL обычно должен использоваться для вывода на платформу.
\n ← → \r\n в системах Windows, если они не используются в двоичном режиме 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 .
Более надежная альтернатива с использованием terser использует preg_split() и regexp:
$lines = preg_split("/\R/", $content);
Заполнитель \R обнаруживает любую комбинацию \ r + \ n . Так что было бы безопаснее и даже работать с текстовыми файлами Classic MacOS ≤ 9 (редко на практике).
Обязательное примечание к микрооптимизации:
В то время как регулярное выражение имеет стоимость, оно на удивление часто бывает быстрее, чем ручные циклы и строковая постобработка в PHP.
И есть несколько классических примеров, в которых вам следует избегать PHP_EOL из-за его неопределенности в платформе :
fsockopen() . mail() и MIME (что действительно, вы не должны делать утомительно себя в любом случае). \n новых строк независимо от среды. Поэтому используйте буквенную комбинацию "\r\n" когда вы не пишете файлы, но готовите данные для определенного контекста, ожидающего сетевых переходов .
PHP_EOL следует использовать при записи данных, таких как файлы журналов.
Это приведет к разрыву линии, характерному для вашей платформы.
PHP_EOL – это константа, содержащая символ (ы) разрыва строки, используемый серверной платформой. В случае Windows это \r\n . На * nix это \n . У вас, видимо, есть сервер Windows.
Если бы вы были на сервере * nix, это изменение не исправило бы его, потому что это было бы \n . Если вы отправляете данные клиенту (т. Е. Браузеру), вы должны использовать \r\n для обеспечения распознавания разрывов строк.
PHP_EOL – это окончание строки, используемое сервером, на котором работает PHP. Представленный пользователем контент, вероятно, будет содержать строку в любом формате, который они используют. Однако вместо того, чтобы взламывать строки новой строки, просто используя функцию file() , она делает именно то, что вам нужно.
ИМХО с использованием PHP_EOL предпочтительнее
чтобы обеспечить согласованность между PHP и JS-обработкой разрыва строки, вы можете определить конечную строку в JS, используя PHP_EOL
var eol = '<?php echo str_replace(array("\n","\r"),array('\\n','\\r'),PHP_EOL) ?>';
впоследствии, используйте eol для разделения представленного содержимого textarea