Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   проблема с nl2br() и <textarea> (http://www.flasher.ru/forum/showthread.php?t=33027)

ihorko 13.06.2002 03:02

проблема с nl2br() и <textarea>
 
помогите, появилась проблема с использованием функции nl2br().
есть форма (с текстареа), в которой набирается текст с использованием синтаксиса для форматирования (например [Ж]жирний текст[/Ж]). Есть анализатор, который перед вставкой в базу заменяет теги этого форматирования на обычные ХТМЛ-теги (теги из примера меняются на <b>жирный текст</b> ). Все работает нормально. Дополнительно очень нужны и теги переноса строки, тоесть <br>. Строка перед анализом на синтаксис пропускается через эту функцию, но теги <br> почему-то не добавляются...
Может проблема в том, что нажатие "Enter" в текстовом поле не вставляет символ переноса строки \n?
Как вообще можно это реализовать (добавление тега <br> )?
Есть конечно идея яваскриптом при нажатии "Enter" вставлять что-то типа [BR], который анализатором менять на <br>, но по моему это уже извращение, да и текст в поле засоряет...
Кто-то что-то посоветует? Плиииииииииииииз!!!

заранее благодарен

metton 13.06.2002 03:31

я делал так:
при вставке в базу данных заменял все нужные мне символы их комбинации на определённоё мною название в скобках...
т.е. в дан случае:
запись в БД:
DEFINE ("NEWLINE","<BR>");
str_replace ( "\n", "[NL]", $message );

а при получении из БД
echo ( str_replace ( "[NL]", NEWLINE, $message ) );
всё пашет :)

ihorko 13.06.2002 03:44

да как вставить я то знаю... у меня проблема в том, что анализатор не находит в полученой строке ни одного \n!!!
в чем может быть прикол?

metton 13.06.2002 03:50

ну не знаю..
если тока ЕНТЕР не нажимаешь...
а так давай кусок кода, отвечающий за это дело... мож там ошибка..
или сам поищи...
у мя нормано находит...

Crazy 13.06.2002 03:50

Код:

<form method="post" action="text.php">
  <textarea name="text">
  </textarea>
  <input type="submit">
</form>
<?php

$text = $HTTP_POST_VARS["text"];
$text = ereg_replace("\r\n|\r|\n","<br>",$text);

echo $text;

?>


ihorko 13.06.2002 04:03

вот функция - анализатор синтаксиса:
Код:

function str2htm ($input_str,&$return_str)
 {
    $tags=array (
            "" => "<B>",
            "
" => "</B>",
            "" => "<I>",
            "
" => "</I>",
            "" => "<U>",
            "
" => "</U>",
            "[url=" => "<A HREF=",
            "[/URL]" => "</A>",
            "[EMAIL=" => "<A HREF=mailto:",
            "[/EMAIL]" => "</A>",
            "[IMG]" => "<IMG SRC=",
            "[/IMG]" => " border=0>",
            "[list]" => "<UL>",
            "[/list]" => "</UL>",
            "[list=1]" => "<OL>",
            "[/list=1]" => "</OL>",

            "[*]" => "<LI>",
            "]" => ">", // the last item in array;
            );
    nl2br($input_str); // вот тут должны все \n меняться на br, это встроенная функция
    reset($tags);

    while($element=each($tags))
    {
        if(strstr($input_str,$element["key"])===false)
        {
        continue;
        }
        else
        {
        $input_str=str_replace($element["key"],$element["value"],$input_str);
        }
    }

 $return_str=$input_str;
 }

Думаю разобраться несложно. а теперь вызываем функцию:
1. вариант номер один:
Код:


$input_str = 'test bold text
                    test italic text';
 str2htm ($input_str, &$return_str);
 echo $return_str;

2. вариант номер два:
Код:


$input_str = 'test bold text\ntest italic text';
 str2htm ($input_str, &$return_str);
 echo $return_str;

Ни так ни сяк не работает... Получая данные из текствого поля тоже не работает....

ihorko 13.06.2002 04:05

пардон за расцветку, не знал :)))
расцветку убрал, а вот глюки с обработкой ХТМЛ тегов присутствуют... пардон :)

ihorko 13.06.2002 04:12

Вложений: 1
короче, с отображением кода тута проблемы... вот файл со всеми ужасами...

metton 13.06.2002 04:22

чё-т ты наворотил
мне кажется легче так:
сделать три массива:

один с символами, которые следует заменять (пользовательские, а не промежуточные (в скобках)) ($symbolsAr)

второй с аналогичнами названиями в скобках($directivesAr)

и третий с константами, содержащими код, на который нужно заменить названия в скобках ($codesAr)

при передаче в бд:
str_replace ( $symbolsAr, $directivesAr, $message );

при получении из бд:
str_replace ( $directivesAr, $codesAr, $message );

ток в массивах элементы должны располагаться одинаково, т.е.
если у тя в $symbolsAr первый элемент - "\n"
то в $directivesAr должно быть первым , напр [BR]
а в $codesAr - первый элемент - константа, содержащая <BR>

у мя этот вариант работает на ура...

ihorko 13.06.2002 04:30

это все хорошо. но я изменю подход только если мне приведут доказательство того, что мой код действительно НЕ ВИДИТ перенос строк, потому что проблема втом то и том то.... По сути нет разницы каким сопособом обрабатывать - мой со всем прекрасно справляется... кроме \n

кто-нибудь скажет, почему мой код не видит переносов строки??!! это уже скорее принципиальный интерес...


Часовой пояс GMT +4, время: 00:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.