У меня есть парсер 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