Intereting Posts
Gmail и Hotmail помечены как спам PHP предотвращает цикл foreach от перезаписывания объекта Получите широту и долготу всего местоположения, которые находятся в радиусе 10 км от моего текущего местоположения с помощью карты google (с использованием PHP) Как использовать переменную функции в другой функции того же класса -Codeigniter Android не удается правильно подключиться к базе данных MySQL Phalcon \ Mvc \ Model :: validation () и немодельные валидаторы Codeigniter Cart не может добавлять элементы PHP-файл Загрузка и загрузка без использования file_get_contents Обновите div, но только если есть новый контент из php-файла PHP: обнаружение страницы Как издеваться над сервисом Symfony 2 в функциональном тесте? Получить скрытое входное значение из базы данных после выбора формы поиск базы данных oracle с использованием php php: Ошибка использования нового DateTime в PHP 5.3 Преобразование строки в Date и DateTime

Когда я использую PHP_EOL вместо \ n и наоборот? Проблема с клиентом Ajax / JQuery

У меня есть парсер 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 из-за его неопределенности в платформе :

  • Ручная генерация полезных нагрузок сетевого протокола, таких как HTTP через fsockopen() .
  • Для создания mail() и MIME (что действительно, вы не должны делать утомительно себя в любом случае).
  • Выход файла, если вы хотите последовательно писать только Unix \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