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


Автор: Гость_Chuck 31.3.2004, 21:18
Привет
У меня на хостинге не поддерживается база данных - мускл
Поэтому я столкнулся с проблемой сохранения в файл данных
Приведу пример. Что бы сделать гостевую книгу - нужен файл, куда будет записываться вся ваша инфа + посты!!!
Так вот проблема в том, что если кто-то нажмет Энтер в поле <textarea name=text ....>Здесь Вы можете выразить ваши мысли</textarea>
то переменная $text будет содержать знак перевода строки (\n)
а при записи в файл я использую следующие поля
ваше_мыло::имя::город::число::текст\n
так вот при записи $text, содержащего \n получится
ваше_мыло::имя::город::число::те
кст\n

А след. строка - уже другое сообщение - все рушится!
Пробывал юзать nl2br(string, string),но эта функция просто вставляет ПЕРЕД \n тэг <br>
так что я решаю проблему так
$text = strtr($text, "\n", "^");
$text = str_replace("^", "<br>", $text);
В Перле это конешно проше!
$value =~ s/\n/<br>/g;
Но вот PHP.....
Может, кто что подскажет?!!!


Автор: IZ@TOP 31.3.2004, 21:52
Цитата
$text = str_replace(array("\r","\n"), "<br />", $text);

Автор: Morello 1.4.2004, 10:06
что-то не совсем понял проблему...кажется здесь можно обойтись функцией trim(). то бишь $text = trim($text)

Автор: Master 1.4.2004, 10:54
Morello
причем тут трим?
он обрезает начальные и конечные пробельные символы... а в этой ситуации еу надо убрать все символы новой строки.

Автор: DENNN 1.4.2004, 11:12
самое простое, но не самое экономичное по времени и объему перекидываемых данных:
Код
urlencode($text) -> запись в файл, urldecode($text)->htmlentities($text, ENT_QUOTES, "cp1251");->echo $text

Автор: IZ@TOP 1.4.2004, 11:32
DENNN , я ни чего не понял из твоего поста. Мне кажеться что я все сказал по решению проблемы. Думаю в доп. постах эта тема не нуждается... если только у Автора не появится еще вопросы по этой теме.

Автор: Гость_Chuck 1.4.2004, 12:15
Цитата(IZ @ 31.3.2004, 21:52)
Цитата
$text = str_replace(array("\r","\n"), "<br />", $text);

Спасибо, Изатоп!!! Огромное!
У меня вопрос, а почему нужно использовать массив, а просто нельзя
$a = str_replace('\n\r', "<br>", $a);
Дело в том, что мне это посоветовали сделать на другом форуме, но это не работает, потом мне посоветовали поиграться с serialaze();
Что Вы на это скажете???

Автор: Master 1.4.2004, 12:21
потому что не во всех операционках, в которых заполняют форму посылается именно \r\n
иногда сивмол возврата коретки может отстутствовать... вернее интерпритатор должен подсознательно его видеть, только вот по моему данный пример в строку:

123\r\n456

добавит 2 <br>, что тоже не правильно.
Вообче на мой взгляд \r вообче можно не использовать. Он твоей задачи повредить не должен.

Автор: Morello 1.4.2004, 12:59
Master
По поводу trim()
Обращаю твое внимание к документации: http://www.php.net/manual/en/function.trim.php
Кажется там ясно сказано, что делает данная функция!

Автор: Master 1.4.2004, 13:22
Morello
Цитата
This function returns a string with whitespace stripped from the beginning and end of str.


я эту функцию использую не один год и для решения этой задачи она не подходит.
Добавлено @ 13:23
не надо обращать моё внимание к документации.
я её читаю не один раз в день.

Автор: Morello 1.4.2004, 14:05
Слушай, Master ! А ведь ты не прав! Просто не хочешь в этом сознаться!

Автор: Master 1.4.2004, 14:24
в чем признаться?

в том, что функция trim, обрезающая начальные и конечные пробельные символы строки подойдет для замены в строке всех символов новой строки на <BR>

в этом я должен признаться?

RTFM!
Добавлено @ 14:29
Morello
ты сначала сам внимательно прочти вопрос. подумай, знаеш ли ты как на него ответить, потом проверь решение если не уверен в его правильности, а потом предлогай, а так извини. Ты не зная броду лезеш в воду.

Автор: IZ@TOP 1.4.2004, 15:11
Модератор: Мастер прав, функция trim не подходит для решения этой проблемы. Но это не повод для флейма.
Все последующие сообщения не относящиеся к теме или которые будут продолжать спор в данном топике - будут удалены.


Цитата
$test = str_replace(array("\r\n", "\r", "\n"), "<br />", $text);

По идее должно помочь, если ф функии str_replace приоритет выполнения начинается с первого индекса массива замены.

Автор: sergejzr 1.4.2004, 19:48
Добрый день!
Гость_Chuck eсли у тебя РНР 5 то можешь юзать БД http://www.sqlite.org.
Есть она и для старых версий РНР, но надо специально устанавливать.
Об этой БД мы говорили http://forum.vingrad.ru/index.php?showtopic=18926. Там пример на Си.
В 5 РНР можешь пользоваться интерфейсом DB.
Если решишь использовать SQLite и нужен будет пример на PHP я его здесь предоставлю.

Автор: sergejzr 1.4.2004, 20:04
Хотя вот пример под рукой нашёл. Может ещё кому понадобится.

Эта история во время отработки создаёт файл, в котором и хранится информация.
Код

include("DB.php");
include("DB/sqlite.php");

if (!extension_loaded("sqlite")) {
dl("sqlite.so");
}
$dsn = array (
       'phptype'   => "sqlite",
       'database'  => "c:\protokol.db", //имя файла с информацией.Это и есть собственно сама БД.
       'mode'      => 0644                    //Будем читать и писать в БД
   );
//"соединяемся" то есть создаём файл
$SDB=&new DB_sqlite();
$SDB->connect($dsn,array('persistent'=> true));
$SDB->setFetchMode(DB_FETCHMODE_ASSOC);
//Юзаем SQL
$SDB->query("create table person(id integer primary key,name string);");
$SDB->query("insert into person values('"."1"."','"."ivanov"."');");
$r = $SDB->query("select name from person;");
 while ($row = $SDB->fetchRow($r ))
{
     print_r(row);
}


никакой другой БД или ДЛЛь не надо. B РНР 5 всё уже есть.
Удачи!
Сергей

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