Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Нужно совсем избавиться от \n


Автор: 137 9.2.2008, 19:46
Писал класс для использования фала в качестве хранилища данных.
записи хранятся в виде 
field1=---=field2=---=....=---=field(n)
field1=---=field2=---=....=---=field(n)
field1=---=field2=---=....=---=field(n)
...
field1=---=field2=---=....=---=field(n)
чтение происходит функцией file(). и получается массив в котором каждый элемент  это строка, которая затем разбивается на поля функцией explode. Поэтому недопустимо чтоюбы в файл записались символы \n и \r . Как их не проспустить совсем?
вот кусок из функции записи в файл:
Код

        $string='';
        $search=array("\n","\r");
        $rep=array("<br>", "");
        for($i=0; $i<count($val); $i++){
            $val[$i]=str_replace($search, $rep, $val[$i]);
            if($i) $val[$i]="=---=".$val[$i];
            $string.=$val[$i];
        }

и не смотря на это в $string всеравно пролетают \n и \r. Объясните плиз, где я ошибся.

Автор: DioNiR 9.2.2008, 20:08
а почему бы просто не заменить:
Код

str_replace("\n", '', $text);

Автор: gta4kv 9.2.2008, 20:12
Цитата(DioNiR @ 9.2.2008,  20:08)
а почему бы просто не заменить:
Код

str_replace("\n", '', $text);

Тогда уж
Код

$text = str_replace('\n', '', $text);


Если \n будет в ковычках("\n") а не в апострофах('\n')  - работать не будет.

Автор: DioNiR 9.2.2008, 20:13
Цитата(gta4kv @ 9.2.2008,  18:12)
Цитата(DioNiR @ 9.2.2008,  20:08)
а почему бы просто не заменить:
Код

str_replace("\n", '', $text);

Тогда уж
Код

$text = str_replace('\n', '', $text);


Если \n будет в ковычках("\n") а не в апострофах('\n')  - работать не будет.

А помоему наборот.

Автор: gta4kv 9.2.2008, 20:16
Цитата(DioNiR @ 9.2.2008,  20:13)
Цитата(gta4kv @ 9.2.2008,  18:12)
Цитата(DioNiR @ 9.2.2008,  20:08)
а почему бы просто не заменить:
Код

str_replace("\n", '', $text);

Тогда уж
Код

$text = str_replace('\n', '', $text);


Если \n будет в ковычках("\n") а не в апострофах('\n')  - работать не будет.

А помоему наборот.

Если по вашему наобарот - проверьте.

Не работает замена:
Код

<?php
$text = "\n
asdasdasd 
\n
asdasd
\n";
$text = str_replace("\n", '', $text);
echo  $text;


Работает:
Код

<?php
$text = "\n
asdasdasd 
\n
asdasd
\n";
$text = str_replace('\n', '', $text);
echo  $text;

Автор: DioNiR 9.2.2008, 20:23
Как бы странно не звучало но у меня работают оба варианта.

Автор: 137 9.2.2008, 20:33
а у меня ни один.  smile 
если текст приходит из textarea

Автор: DioNiR 9.2.2008, 20:35
код в студию...

Автор: gta4kv 9.2.2008, 20:38
Цитата(DioNiR @ 9.2.2008,  20:23)
Как бы странно не звучало но у меня работают оба варианта.

Нде... Есть текст в апострофах а \n в ковычках только тогда не работает.  smile 

+1 к коду в студию

Автор: 137 9.2.2008, 20:40
Код

    function add($val)
    {
        if(count($val)!==$this->fields)
        {
            echo ("Ошибка: нехватает ".abs(count($val)-$this->fields)." полей в добавляемом элементе");
            return false;
        }
        else{
        $string='';
        $search=array('\n', '\r');
        $rep=array("<br>", "");
        for($i=0; $i<count($val); $i++){
            $val[$i]=str_replace($search, $rep, $val[$i]);
            if($i) $val[$i]="=---=".$val[$i];
            $string.=$val[$i];
        }

        $f=fopen($this->file, "a");
        fputs($f, trim($string)."\n");
        fclose($f);
        $this->file_db($this->file, $this->fields);
        }
    }


ну и приходит все из обыкновенной textarea ...

Автор: DioNiR 9.2.2008, 20:48
чесно не понял как у тебя должно работать:
Код
$val[$i]=str_replace($search, $rep, $val[$i]);

Когда $search масив и $rep масив.

Автор: 137 9.2.2008, 20:52
ну всегда все работало... кроме этого случая с \n
Цитата

С версии PHP 4.0.5, любой аргумент str_replace()  может быть массивом.

Автор: DioNiR 9.2.2008, 21:03
Попробуй замени это:
Код
$search=array('\n', '\r');


На на это:
Код
$search = array("\n", "\r");

Автор: 137 9.2.2008, 22:04
2DioNiR: изначально так и было.. не работает...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)