Intereting Posts
Процент символа в URI CodeIgniter Как удалить строку mysql после прохода времени? PHP и MYSQL: использование хэша bcrypt и проверка пароля с базой данных dompdf не отображает изображения с сервера, а выводит из внешнего источника Добавление в базу данных. Нет повторения при обновлении Как я могу писать символы неанглийского языка, такие как арабские или персидские символы, в изображение? Неправильно ли использовать тот же метод для SAVE и UPDATE? RegEx для получения идентификатора видео YouTube с любого URL-адреса YouTube Исключение .htaccess делает проблему в главной директории исключая URL-адреса из ссылок на пути? Обновить родительский диалог JQuery UI проанализировать XML с помощью SimpleXML, который имеет несколько пространств имен PHP: добавление месяцев к дате, не превышающих последний день месяца Расширение или включение – что лучше в Twig? В Symfony2 можно ли файл validation.yml разбивать на несколько файлов с помощью импорта?

взорвать ошибку \ r \ n и \ n в windows и linux server

Я использовал функцию explode для получения содержимого textarea в массиве на основе строки. Когда я запускаю этот код в своем localhost (WAMPserver 2.1), он отлично работает с этим кодом:

$arr=explode("\r\n",$getdata); 

Когда я загружаю на свой Linux-сервер, мне нужно каждый раз менять код выше:

 $arr=explode("\n",$getdata); 

Каким будет постоянное решение для меня. Какой общий код будет работать для меня для обоих серверов?

спасибо

Постоянный PHP_EOL содержит зависящий от платформы перевод строки, поэтому вы можете попробовать следующее:

 $arr = explode(PHP_EOL, $getdata); 

Но еще лучше – нормализовать текст, потому что вы никогда не знаете, какую ОС используют ваши посетители. Это один из способов нормализовать использование только \ n в качестве перевода строки (но также см. Ответ Алекса, поскольку его регулярное выражение будет обрабатывать все типы строк):

 $getdata = str_replace("\r\n", "\n", $getdata); $arr = explode("\n", $getdata); 

Насколько я знаю, лучший способ разбить строку на новые строки – preg_split и \R :

 preg_split('~\R~', $str); 

\R соответствует любой последовательности Unicode Newline Sequence, то есть не только LF , CR , CRLF , но и более экзотическим, таким как VT , FF , NEL , LS и PS .

Если это поведение не требуется (почему?), Вы можете указать опцию BSR_ANYCRLF :

 preg_split('~(*BSR_ANYCRLF)\R~', $str); 

Это будет соответствовать только «классическим» последовательностям новой строки.

Наилучшим образом, наилучшим подходом было бы нормализовать ваши входные данные, чтобы просто использовать \n , например:

 $input = preg_replace('~\r[\n]?~', "\n", $input); 

Поскольку:

  • В Unix используется \n .
  • Windows использует \r\n .
  • (Старый) Mac OS использует \r .

Тем не менее, взлёт \n должен получить наилучшие результаты (если вы не нормализуете).

Константа PHP_EOL содержит последовательность символов новой строки операционной системы хоста.

 $arr=explode(PHP_EOL,$getdata); 

Вы можете использовать preg_split() который позволит ему работать независимо:

 $arr = preg_split('/\r?\n/', $getdata);