2014-12-27 4 views
-1

Я боролся с символом новой строки PHP. Я согласен со следующими фактами: PHP_EOL предоставляет нейтральную платформу платформы (\ r, \ r \ n, \ n на основе ОС), и мы можем использовать это для нашей выгоды.Почему PHP_EOL пишет r n в конце каждой строки

Я делаю простой PHP-файл для чтения и записи в моей Mac OS (Yosemite) с помощью XAMPP.

Ниже приведен мой код для записи в файл.

$handle = fopen("test.txt", "a+"); 

$data = "Hello World." . PHP_EOL; 

fwrite($handle, $data); 

Выходной файл в файле приведен ниже.

Hello World.\r\n 

Примечание: Я проверил это как с fwrite(), так и с file_get_contents(). Нет никакой разницы.

Мой вопрос: При написании файла через запись с помощью PHP_EOL, почему он пишет \ r \ n в конце строки?

У меня нет проблем при вставке новой строки (разрыв строки HTML) путем вызова nl2br() функция. Однако из-за этого характера мой вывод HTML имеет эти символы \ r \ n !!!

Я играл вокруг с большим количеством различных вариантов, как показано ниже

$line = str_replace("\r\n","<br/>",$line); // Does NOT work! 
$line = preg_replace('~\r?\n~','<br/>', $line); // Works as that of nl2blr()! 
$line = str_replace(PHP_EOL, "<br/>",$line); // Works as that of nl2br()! 

над вставкой опциями, по HTML линии излома, но ничего не удаляет это «\ г \ п» от фактического текста!

Я протестировал, введя несколько строк вручную (очевидно, не существует \ r \ n), и этот метод чтения отлично работает без каких-либо \ r \ n. Следовательно, я пришел к выводу, что {PHP_EOL + метод записи файлов} может быть виновником!

Я действительно смущен тем, что мне не хватает?

Любая помощь будет высоко оценена.

Заранее спасибо.

+0

Почему кто-то ответил на этот вопрос? – itsraghz

ответ

1

Без двойных кавычек PHP не обрабатывает специальный символ и должен заменяться так, как вы ожидаете.

$line = str_replace('\r\n',"<br/>",$line); // note '\r\n' not "\r\n"

+0

Спасибо. Оно работает. Однако у меня есть вопрос. Консультант эксперта НЕ заменяет ничего, а просто использует nl2br(). Однако \ r \ n все еще сохраняется с nl2br()! Любое предложение? – itsraghz

+0

@itsraghz Я думаю, что, вероятно, где-то в кодировке или декодировании, ваши символы EOL записываются как стандартный текст, а не фактические символы EOL (chr 10 и 13). Я не знаю, где это происходит, не видя всего вашего кода. Самый безопасный способ может быть таким, заменяя '\ r \ n' фактическим символом EOL, а затем используя встроенные' nl2br() 'подобные другим, предложите: ' $ line = nl2br (str_replace ('\ r \ n ', PHP_EOL, $ line)); ' –

+0

спасибо. Ну, это была просто демонстрация/практика, когда я читал из файла, и я вложил в нее суть. Позвольте мне попробовать ваше предложение и вернуться за дополнительной помощью! – itsraghz

Смежные вопросы