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


Автор: sayber 21.8.2006, 21:31
Я тут делаю небольшой кодик и мне надо чтоб если в поле textarea я нажал enter то это заменялось на <br>

Вот  этот код не работает

Код


<?php

function replace_parcer () {
    
    
//заменить все теги
$_POST['text_compiler'] = str_replace('<', '&lt;', $_POST['text_compiler']);
$_POST['text_compiler'] = str_replace('>', '&gt;', $_POST['text_compiler']);
$_POST['text_compiler'] = str_replace('"', '&quot;', $_POST['text_compiler']);
$_POST['text_compiler'] = str_replace('\n', '<br>', $_POST['text_compiler']);
$_POST['text_compiler'] = str_replace('\r', '<br>', $_POST['text_compiler']);

//заменить ссылки
$_POST['text_compiler'] = preg_replace('/http:\/\/[^\s]+/', '<a href="$0" alt="$0" tooltip="Перейдите по ссылке...">$0</a>', $_POST['text_compiler']);



$str = stripslashes( $_POST['text_compiler'] );
echo $str;
    
    
}

print <<<END
<form action="1.php?ok=1" method=post>
<textarea name="text_compiler" cols=44 rows=22>
Мы не знаем, <<< ."". .>>> &&&& насколько успешно продавалась аркада http://www.ag.ru/games/crazy_frog_racer Краткая информация об игре, созданная "по мотивам" короткометражного анимационного ролика, но, 



видимо, студию Neko Entertainment и владельцев лицензии цифры устраивают, — иначе бы не взялись за сикв
</textarea>
<input type="submit" >
</form>
END;


if (isset($_GET['ok']) == 1) {
    
replace_parcer();
}
?>


А точнее не работает 
Код

$_POST['text_compiler'] = str_replace('\n', '<br>', $_POST['text_compiler']);
$_POST['text_compiler'] = str_replace('\r', '<br>', $_POST['text_compiler']);

Автор: szz 21.8.2006, 21:36
Какую ошибку выдает?

Автор: sayber 21.8.2006, 21:39
szz, Нет ошибки - он просто не меняет снос на <br>

Автор: Muchenik 21.8.2006, 21:47
Код

$_POST['text_compiler'] = str_replace('\n', '<br>', $_POST['text_compiler']);
$_POST['text_compiler'] = str_replace('\r', '<br>', $_POST['text_compiler']);


Непонятен смысл второй строки. Ты же уже заменил <br> в первой строке на \n 

Я бы вместо этих двух строк использовал бы nl2br();

Автор: sayber 21.8.2006, 22:37
Без разници - есть или нет второй строки

Добавлено @ 22:41 
Цитата(Muchenik @ 21.8.2006,  21:47)

Я бы вместо этих двух строк использовал бы nl2br();

А вообще спс за функцию.

я помню раньше была функция для разбивки текста по (к примеру) 30-ти символам.

То есть к примеру у нас текст аааааааааааааааааааааааааааааааааааааа разбивается на аааааааааа аааааааааа ааааааааа

Автор: Muchenik 21.8.2006, 22:46
Код

wordwrap ();

Автор: Mal Hack 21.8.2006, 23:00
Цитата(Muchenik @  21.8.2006,  23:46 Найти цитируемый пост)
wordwrap ();

А теперь смотрим в мане, что эта функция делает...

htmlspecialchars
nl2br

Автор: Muchenik 21.8.2006, 23:23
Цитата(Mal Hack @ 21.8.2006,  23:00)
Цитата(Muchenik @  21.8.2006,  23:46 Найти цитируемый пост)
wordwrap ();

А теперь смотрим в мане, что эта функция делает...

htmlspecialchars
nl2br

В смысле ???  smile 

Человек спросил:
Цитата

я помню раньше была функция для разбивки текста по (к примеру) 30-ти символам.



wordwrap --  Выполняет перенос строки на данное количество символов с использованием символа разрыва строки.

Mal Hack, при всем уважении,  читайте внимательней пост

Автор: Mal Hack 21.8.2006, 23:42
Цитата(Muchenik @  22.8.2006,  00:23 Найти цитируемый пост)

Mal Hack, при всем уважении,  читайте внимательней пост

Читаю пост. Речь идет про замену переводом строк на <br>.
Я для этого говорил.

Автор: Vaulter 22.8.2006, 08:27
Muchenik, в данном случае wordwrap не подходит, так разбиения не треба, а треба замена.


Автор: Kirill Baranov 22.8.2006, 09:58
По-моему вы что-то уж больно сильно геморитесь, ибо можно просто сделать:
Код

$content=nl2br($_POST['text_compiler']);

Автор: ewolf 22.8.2006, 10:28
Совершенно верно, следует использовать nl2br.

А так, вообще экранирующие символы действуют только в строках, заключенных в двойные кавычки ( http://www.php.net/manual/ru/language.types.string.php )

Таким образом, хотя nl2br вернее и проще, код из первого поста можно переписать так:

Код

$_POST['text_compiler'] = str_replace("\n", '<br>', $_POST['text_compiler']);$_POST['text_compiler'] = str_replace('\r', '<br>', $_POST['text_compiler']);[/



Автор: sayber 22.8.2006, 16:47
Короче вот конечный результат 


Код

function replace_news () {

$_POST['text'] = str_replace('<', '&lt;', $_POST['text']);
$_POST['text'] = str_replace('>', '&gt;', $_POST['text']);
$_POST['text'] = str_replace('"', '&quot;', $_POST['text']);
$_POST['text'] = nl2br("{$_POST['text']}");
$_POST['text'] = preg_replace('/http:\/\/[^\s]+/', '<a href="$0" alt="$0">$0</a>', $_POST['text']);
$_POST['text'] = stripslashes( $_POST['text'] );

}

Можно закрывать тему . Спасиб!

Автор: Mal Hack 22.8.2006, 22:01
Цитата(sayber @  22.8.2006,  17:47 Найти цитируемый пост)
$_POST['text'] = nl2br("{$_POST['text']}");

О всемогуще Админе... Что это???
Код
$_POST['text'] = nl2br($_POST['text']);


Цитата(sayber @  22.8.2006,  17:47 Найти цитируемый пост)
$_POST['text'] = str_replace('<', '&lt;', $_POST['text']);
$_POST['text'] = str_replace('>', '&gt;', $_POST['text']);
$_POST['text'] = str_replace('"', '&quot;', $_POST['text']);


Цитата(sayber @  22.8.2006,  17:47 Найти цитируемый пост)
$_POST['text'] = stripslashes( $_POST['text'] );

А что мешает htmlspecialchars использовать?

Автор: ZlojEzh 23.8.2006, 09:42
в догонку:
в изначальном коде ошибка заключалась в использовании одинарных кавычек
надо писать 
Код
str_replace("\n",...,...)

хотя лучше, конечно, использовать nl2br()

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