Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Режим трансляции переноса строк
 
 автор: KatyYOU   (22.08.2009 в 21:07)   письмо автору
 
 

Не знала куда примастить вопрос, создала новую тему.
Никак не пойму, есть или нет в php режим трансляции символа \n в перенос строки?
Где-то написано, что есть, по большей части все молчат, а при проверке вообще-то не работает.

  Ответить  
 
 автор: Fractured   (22.08.2009 в 21:16)   письмо автору
 
   для: KatyYOU   (22.08.2009 в 21:07)
 

<?php
echo "\n";

?

  Ответить  
 
 автор: KatyYOU   (22.08.2009 в 21:25)   письмо автору
 
   для: Fractured   (22.08.2009 в 21:16)
 

Мдя, я как-то невнятно спросила.
При открытии файла fopen($filename, $mode)
mode может быть там... r, w, и пр. А если в конце дописать еще t,
то есть "rt", то файл будет считываться, преобразовывая символы \n в переносы строки. У меня так не вышло. Вот в общем вопрос...

  Ответить  
 
 автор: Fractured   (22.08.2009 в 21:33)   письмо автору
 
   для: KatyYOU   (22.08.2009 в 21:25)
 

> А если в конце дописать еще t, то есть "rt", то файл будет считываться, преобразовывая символы \n в переносы строки.

Приложите файл, с которым "не вышло"

  Ответить  
 
 автор: heed   (22.08.2009 в 21:32)   письмо автору
 
   для: KatyYOU   (22.08.2009 в 21:07)
 

<?php
header
('content-type:text/plain'); 

echo <<<TXT
\n\n\r\n ${_ENV['PROCESSOR_ARCHITECTURE']}\r\n
TXT;

?>

  Ответить  
 
 автор: KatyYOU   (22.08.2009 в 21:51)   письмо автору
228 байт
 
   для: heed   (22.08.2009 в 21:32)
 

Код:

Файл Main_text:
Первый абзац. \n Второй абзац \n Третий абзац. \n
<?
    $file_name 
'Text/Main_text.txt';
    
$R    fopen($file_name"rt");
    
$Text fread($Rfilesize($file_name));
    
fclose($R);
    print(
$Text);
        
?>

  Ответить  
 
 автор: heed   (22.08.2009 в 22:18)   письмо автору
 
   для: KatyYOU   (22.08.2009 в 21:51)
 

Насколько знаю такого нет ,
есть настройки позволяющие некоторым функциям правильно распознавать разные
переводы строк как \n или \r\n.или \r

и 't' поддерживается только в виндовс,
оно вроде влияет при записи файла как в него запишется \n
, рекомендуется мол записывать правильные для системы символы
, не проверял только

а так с помощью str_replace() например можно заменять , или preg_replace().
// но за 6й php не скажу

  Ответить  
 
 автор: Fractured   (22.08.2009 в 22:22)   письмо автору
 
   для: KatyYOU   (22.08.2009 в 21:51)
 

> Первый абзац. \n Второй абзац \n Третий абзац. \n

Вы не совсем правильно поняли смысл t. Перенос строки в *nix-системах задаётся с помощью байта 0x0A (10), а в windows-системах с помощью 2-х байт: 0x0D 0x0A. Просто обычно принятно обозначать эти байт как \r (0x0D) и \n (0x0A), так как они не являются "видимыми" символами.

Переводить последовательность их 2-х символов "\" и "n" в символ переноса строки оно не будет.

  Ответить  
 
 автор: KatyYOU   (22.08.2009 в 23:02)   письмо автору
 
   для: Fractured   (22.08.2009 в 22:22)
 

Читаю в руководстве по php4: "Дело в том, что в конце любой из
строк r, w, a, r+, w+ и a+ может находиться еще один необязательный символ — b
или t. Если указан b (или не указан вообще никакой), то файл открывается в режиме
бинарного чтения/записи. Если же это t, то для файла устанавливается режим транс-
ляции символа перевода строки, т. е. он воспринимается как текстовый. "

Если смысл я поняла не верно, и символ \n не транслируется в перенос строки, тогда какой смысл в t?
Или все эти приколы могут касаться только php4? У меня стоит 5.10.

  Ответить  
 
 автор: Fractured   (22.08.2009 в 23:42)   письмо автору
275 байт
 
   для: KatyYOU   (22.08.2009 в 23:02)
 

Попробую объяснить лучше.

В Windows перенос строки принято выражать 2-мя байтами: 0x0D 0x0A. В *nix-системах принято перенос строки выражать только одним байтом: 0x0A.

Они невидимые и поэтому показать их нельзя. Но можно увидеть разницу в Блокноте, который переваривает только windows-style переводы строк.

Я прикрепил архив с двумя файлами: "test_unix_style.txt", "text_windows_style".
В файле "test_unix_style.txt" где я записал переводы строк с помощью одного байта 0x0A (этот байт называют Line Feed, обозначают часто в стиле C как \n).Попробуйте открыть его Блокнотом. Вы поймёте, что Блокнот такие переводы строк не любит.
Второй файл содержит переводы строк в стиле windows и выражается уже двумя байтами (0x0D - Carriage Return и упомянутый 0x0A). Его Блокнот уже успешно открывает!

Так вот флаг "t" в сущности позволяет в системе Windows считывать/записывать файл с "правильным" переводом строк. То есть если написать типа такого:
<?php

$fp 
fopen('test_unix_style.txt''r');
$s '';
while( 
$b fgets($fp) )
    
$s .= $b;
fclose($fp);

$fd fopen('test_unix_style.txt''wt'); // Перезапишем с флагом "t"
fputs($fd$s);
fclose($fd);

?>

и запустить на машие с windows, то мы "исправим" файл "test_unix_style.txt'" для чтения его в Блокноте.

Для Вашей же задачи по сути нужно применять str_replace().

P.S. Сравните размеры 2-х файлов.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования